问题描述
我有两个数组“ train_vol” 和“ train_time” ,形状为形状(164,6790),还有一个数组“ train_cap “ ,其形状为形状(164,1)。我想像这样训练模型... 输入-> train_vol和train_time输出-> train_cap ..... 验证输入-> val_vol,val_time和验证输出- -> val_cap ..... val_vol的形状,val_time为(42,6790),val_cap为(42,1)1] 1
我正尝试使用model.fit()训练模型。我尝试将 2个数组作为输入分配给变量x **,将 1个数组作为输出变量y 。但是我收到如图所示的错误。2] 2
文档说我可以提供数组列表作为输入。所以我已经尝试过了,但是我收到了以下错误,如图所示。任何人都可以让我知道我在哪里做错了吗?3] 3
解决方法
尝试将参数传递为
model.fit(x=(train_vol,train_time),..)
使用()
代替[]
。背后的原因是模型无法确定您是要给出2个样本的数据集还是两个并发数据集。第一种情况表示两个数据集,第二种情况表示具有两个样本的数据集。
您可以使用功能性API创建包含多个输入和多个输出的模型。
def create_model3():
input1 = tf.keras.Input(shape=(13,),name = 'I1')
input2 = tf.keras.Input(shape=(6,name = 'I2')
hidden1 = tf.keras.layers.Dense(units = 4,activation='relu')(input1)
hidden2 = tf.keras.layers.Dense(units = 4,activation='relu')(input2)
merge = tf.keras.layers.concatenate([hidden1,hidden2])
hidden3 = tf.keras.layers.Dense(units = 3,activation='relu')(merge)
output1 = tf.keras.layers.Dense(units = 2,activation='softmax',name ='O1')(hidden3)
output2 = tf.keras.layers.Dense(units = 2,name = 'O2')(hidden3)
model = tf.keras.models.Model(inputs = [input1,input2],outputs = [output1,output2])
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
return model
您可以使用上述语法指定图层之间的连接。您的模型可以有2个以上的输入。使用上述代码构建的模型如下所示。
请注意,“输入”层中的13
和6
代表各自数据中的要素。
要训练模型,可以使用以下语法:
history = model.fit(
x = {'I1':train_data,'I2':new_train_data},y = {'O1':train_labels,'O2': new_train_labels},batch_size = 32,epochs = 10,verbose = 1,callbacks = None,validation_data = [(val_data,new_val_data),(val_labels,new_val_labels)]
)
此处train_data和new_train_data是两个单独的数据实体。
注意:您也可以通过列表而不是字典,但是字典在编码方面更具可读性。
有关Functional API的更多信息。您可以检查以下链接:Functional API