首页 > 解决方案 > 具有不同形状的多个输入的 tensorflow.keras 模型(错误)

问题描述

Heyho,我想构建一个具有不同形状的多个输入的 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'>

我已经用这个括号和我的输入尝试了几种不同的变体,但它仍然不起作用。非常感谢任何帮助!

标签: pythonnumpytensorflowkeras

解决方案


在使用这个模型的 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)

但我不明白为什么?


推荐阅读