微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

属性错误:“列表”对象没有属性“形状”尝试训练具有多个特征多个数组的模型时出错

如何解决属性错误:“列表”对象没有属性“形状”尝试训练具有多个特征多个数组的模型时出错

我有两个数组“ 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个以上的输入。使用上述代码构建的模型如下所示。

请注意,“输入”层中的136代表各自数据中的要素。

Model Visualization

要训练模型,可以使用以下语法:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。