Python ValueError:形状(无,1)和(无,3)不兼容
我有一个音频文件的三维数据集,其中Python ValueError:形状(无,1)和(无,3)不兼容,python,tensorflow,keras,Python,Tensorflow,Keras,我有一个音频文件的三维数据集,其中X.shape是(329,20,85)。我希望有一个简单的裸体模型运行,所以请不要挑剔,只解决手头的问题。代码如下: model = tf.keras.models.Sequential() model.add(tf.keras.layers.LSTM(32, return_sequences=True, stateful=False, input_shape = (20,85,1))) model.add(tf.keras.layers.LSTM(20)) m
X.shape
是(329,20,85)
。我希望有一个简单的裸体模型运行,所以请不要挑剔,只解决手头的问题。代码如下:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(32, return_sequences=True, stateful=False, input_shape = (20,85,1)))
model.add(tf.keras.layers.LSTM(20))
model.add(tf.keras.layers.Dense(nb_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=["accuracy"])
model.summary()
print("Train...")
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=50, validation_data=(X_test, y_test))
但后来我在标题中提到了一个错误:
ValueError:形状(无,1)和(无,3)不兼容
这是model.summary()
为此,我遵循post并将Tensorflow更新为最新版本,但问题依然存在。这篇文章完全不相关,而且非常不可靠。尽管有一点相关,但这篇帖子暂时还没有得到回复
更新1.0:
我强烈认为问题与最后的density
层有关,在该层中,我将nb_类分为3类,因为我在y
中对3类进行分类
因此,我将densed
层的nb_类
更改为1,它运行模型并给出这个输出,我认为这个输出是错误的
Train...
9/9 [==============================] - 2s 177ms/step - loss: 0.0000e+00 - accuracy: 0.1520 - val_loss: 0.0000e+00 - val_accuracy: 0.3418
<tensorflow.python.keras.callbacks.History at 0x7f50f1dcebe0>
火车。。。
9/9[=====================================================================2s 177ms/步-损耗:0.0000e+00-精度:0.1520-val\u损耗:0.0000e+00-val\u精度:0.3418
更新2.0:
我对y
s进行了热编码,并解决了形状问题。但是现在上面的
输出仍然存在。有什么帮助吗?或者我应该为此发布一个新问题?谢谢你的帮助
我应该如何继续,或者应该更改什么?第一个问题是LSTM输入形状<代码>输入形状=(20,85,1) 从文档: LSTM层需要具有形状的三维张量(批量大小、时间步长、输入尺寸)。
model.add(tf.keras.layers.Dense(nb_classes,activation='softmax'))
-这表明您正在进行多类分类
因此,您需要您的y\u训练
和y\u测试
必须是一个热编码。这意味着它们必须具有维度(样本数,3)
,其中3
表示类的数量
您需要将tensorflow.keras.utils.to\u category
应用于它们
y_train = to_categorical(y_train, 3)
y_test = to_categorical(y_test, 3)
参考:
tf.keras.callbacks.History()
-此回调自动应用于每个keras模型。历史对象由模型的fit方法返回
参考:检查最后一个密集层(输出)的类数是否与训练数据集中的目标类数相同。我在训练数据集并纠正数据集时犯了类似的错误,这对我很有帮助。您的y_train标签的形状是什么?你使用了一个热编码的吗?@MarcoCerliani
y
的形状是(329,1)
,即一维。我一定要喝一杯热饮吗?当然。。。要进行分类(y\u train,3)@MarcoCerliani,你能检查第二次更新吗?使用“稀疏分类交叉熵”可以节省一个热编码步骤,你能检查问题中的第二次更新吗?你是说这个
?是的,那个错误。它甚至没有把它当作一个错误,只是把它打印成输出。它不是一个错误。。。这是正常的输出打印,别担心,这是日志,不是错误。您可以更改tensorflow的日志级别,或者尝试以下操作,hist=model.fit(X\u列,y\u列,批次大小=批次大小,nb\u历元=50,验证数据=(X\u测试,y\u测试))
y_train = to_categorical(y_train, 3)
y_test = to_categorical(y_test, 3)