【问题标题】:tensorflow.keras model with multiple inputs with different shapes (Error)具有不同形状的多个输入的 tensorflow.keras 模型(错误)
【发布时间】: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


【解决方案1】:

在使用此模型的 tensorflow 中,我通过在馈入输入前添加一个额外维度来解决它。

所以虽然我已经定义了:

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")

我实际上不得不喂食:

board_array_onehot = np.ones((1,8,8,12))
tmp_arr_legal = np.ones((1,1984))
inputs = (board_array_onehot, tmp_arr_legal[0])

arr_predictions = models[active].predict(inputs)

但我不明白为什么?

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2023-02-09
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2019-01-26
    • 2022-12-22
    • 2019-02-07
    相关资源
    最近更新 更多