【发布时间】:2021-07-20 00:57:12
【问题描述】:
嘿嘿,我想构建一个具有多个不同形状的输入的 Keras 模型。 这是我的模型:
input_shape_board = (8,8,12)
input_board = tf.keras.Input(shape = input_shape_board, name = "board_input")
input_shape_legal = (1984)
input_legal = tf.keras.Input(shape = input_shape_legal, name = "legal_input")
a = layers.Dense(64)(input_board)
a = tf.keras.layers.LeakyReLU(alpha=0.01)(a)
a = layers.Dense(64)(a)
a = layers.Flatten()(a)
b = layers.Conv2D(64, 4, activation='relu')(input_board)
b = layers.MaxPooling2D((4,4))(b)
b = layers.Flatten()(b)
c = layers.Dense(200, activation='relu')(input_legal)
d = layers.Concatenate()([a,b,c])
d = layers.Dense(1984)(d)
outputs = layers.Activation('sigmoid')(d)
model = tf.keras.Model(inputs=(input_board, input_legal), outputs=outputs)
我后来用(某种 - 适应值)以下内容进行训练:
board_array_onehot = np.ones((1,8,8,12))
tmp_arr_legal = np.ones((1984))
inputs = (board_array_onehot, tmp_arr_legal[0])
arr_predictions = models[active].predict(inputs)
我已经确定,我的所有输入都是 numpy 数组,但我现在收到以下错误:
ValueError: Failed to find data adapter that can handle input: (<class 'tuple'> containing values of types {"<class 'numpy.float64'>", "<class 'numpy.ndarray'>"}), <class 'NoneType'>
我已经用这个括号和我的输入尝试了几种不同的变体,但它仍然不起作用。非常感谢任何帮助!
【问题讨论】:
-
这一行
board_array_onehot = np.ones((1,8,8,12)),尺寸是否正确?因为你用input_shape_board = (8,8,12)训练。 -
和
inputs = (board_array_onehot, tmp_arr_legal[0])在这里你给出所有数组而不是一个数组。试试inputs = (board_array_onehot[0], tmp_arr_legal[0]) -
是的,没错,我之前确实添加了一个额外的维度,当使用只有一个输入的网络进行训练时,它似乎需要它。我删除了它,它给出了完全相同的错误。
-
不幸的是,其他提示也无济于事。如果我将其更改为“正确”值,则会收到有关错误输入尺寸的错误
-
试试这个
tmp_arr_legal = np.ones((1984,1))这会给你一个数组而不是numpy.float这是你的错误所说的。
标签: python numpy tensorflow keras