Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:形状(无,1)和(无,3)不兼容_Python_Tensorflow_Keras - Fatal编程技术网

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)