Keras fit模型:TypeError: 不可哈希的类型:’numpy.ndarray’

我实现了以下代码。在之前版本的Keras中它可以正常工作:

max_sequence = 56input_dim = 26    print("构建模型..1")first_input = Input(shape=(max_sequence,input_dim))first_lstm = LSTM(5, return_sequences=True)(first_input)first_bn = BatchNormalization()(first_lstm)first_activation = Activation('tanh')(first_bn)first_flat = Flatten()(first_activation)print("构建模型..2")second_input = Input(shape=(max_sequence,input_dim))second_lstm = LSTM(5, return_sequences=True)(second_input)second_bn = BatchNormalization()(second_lstm)second_activation = Activation('tanh')(second_bn)second_flat = Flatten()(second_activation)merge=concatenate([first_flat, second_flat])merge_dense=Dense(3)(merge)merge_bn = BatchNormalization()(merge_dense)merge_activation = Activation('tanh')(merge_bn)merge_dense2=Dense(1)(merge_activation)merge_activation2 = Activation('tanh')(merge_dense2)train_x_1 = np.reshape(np.array(train_x_1), [2999, 56, 26])train_x_2 = np.reshape(np.array(train_x_2), [2999, 56, 26])model=Model(inputs=[train_x_1,train_x_2], outputs=train_y_class)optimizer = RMSprop(lr=0.5)model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])history = model.fit([train_x_1, train_x_2], train_y_class, nb_epoch=300, batch_size=128,                    validation_data=([val_x_1, val_x_2], val_y_class))

运行时:

history = model.fit([train_x_1, train_x_2], train_y_class, nb_epoch=300, batch_size=128,                    validation_data=([val_x_1, val_x_2], val_y_class))

出现了以下错误:

TypeError: unhashable type: 'numpy.ndarray' 出现。

因此,我检查了 train_x_1, train_x_2, train_y_class。它们的类型是 <class 'numpy.ndarray'>。我搜索了解决方案,尝试将其类型更改为元组,但没有成功。

如果 numpy.ndarray 是不可哈希的,那么 model.fit 接收什么类型的输入?

训练数据的形状如下:

train_x_1.shape(2999, 56, 26)train_x_2.shape(2999, 56, 26)train_y_class.shape(2999, 1)

train_x_1 的一个样本如下所示:

array([[[ 1.62601626e-02,  2.26890756e-01,  1.17764920e-02, ...,          0.00000000e+00,  0.00000000e+00,  0.00000000e+00],        [ 1.62601626e-02,  2.26890756e-01,  1.17764920e-02, ...,          0.00000000e+00,  0.00000000e+00,  0.00000000e+00],        [ 1.62601626e-02,  2.26890756e-01,  1.17764920e-02, ...,          0.00000000e+00,  0.00000000e+00,  0.00000000e+00],        ...,        [ 1.62601626e-02,  2.26890756e-01,  1.17764920e-02, ...,          0.00000000e+00,  0.00000000e+00,  0.00000000e+00],        [ 1.62601626e-02,  2.26890756e-01,  1.17764920e-02, ...,          0.00000000e+00,  0.00000000e+00,  0.00000000e+00],        [ 1.62601626e-02,  2.26890756e-01,  1.17764920e-02, ...,          0.00000000e+00,  0.00000000e+00,  0.00000000e+00]],

回答:

问题在于你在构建模型时直接将输入和输出数组(而不是输入和输出张量)传递给了 Model 类:

model = Model(inputs=[train_x_1,train_x_2], outputs=train_y_class)

相反,你需要传递相应的输入和输出张量,如下所示:

model = Model(inputs=[first_input,second_input], outputs=merge_activation2)

Related Posts

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注