Python ValueError:在尝试对IMDB评论进行分类时,登录和标签必须具有相同的形状((无,1)与(无,10000))

Python ValueError:在尝试对IMDB评论进行分类时,登录和标签必须具有相同的形状((无,1)与(无,10000)),python,tensorflow,machine-learning,keras,logits,Python,Tensorflow,Machine Learning,Keras,Logits,我试图使用Keras对IMDB电影评论进行二元分类。下面是我使用的代码 来自keras导入模型的 从keras导入图层 model=models.Sequential() model.add(layers.Dense(16,activation=“relu”,input_shape=(10000,)) model.add(layers.Dense(16,activation=“relu”)) model.add(layers.Dense(1,activation=“sigmoid”)) comp

我试图使用Keras对IMDB电影评论进行二元分类。下面是我使用的代码

来自keras导入模型的

从keras导入图层
model=models.Sequential()
model.add(layers.Dense(16,activation=“relu”,input_shape=(10000,))
model.add(layers.Dense(16,activation=“relu”))
model.add(layers.Dense(1,activation=“sigmoid”))
compile(optimizer=“rmsprop”,loss=“binary\u crossentropy”,metrics=[“acc”])
历史=模型.fit(部分x_序列,部分y_序列,历代=20,批量大小=512,验证数据=(x_val,y_val))
每个输入张量的形状如下所示

print(partial_x_train.shape) --> (15000, 10000)
print(partial_y_train.shape)--> (15000, 10000)
print(x_val.shape) --> (10000, 10000)
print(y_val.shape) --> (10000, 10000)
但是在执行上面的程序时,我得到了以下错误

ValueError:在用户代码中:
ValueError:登录和标签必须具有相同的形状((无,1)与(无,10000))

我搜索了很多这样的问题,但不明白我做错了什么。有人能帮我避免这个错误并编译模型吗?

如前所述
ValueError
,您正试图计算形状之间的损失
((无,1)
vs
(无,10000))
。如果您发布或引用IMDB的培训集,这一点很清楚。尝试使用
keras
中的内置IMDB数据集

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers

max_features = 20000  # Only consider the top 20k words
maxlen = 200  # Only consider the first 200 words of each movie review

(x_train, y_train), (x_val, y_val) = keras.datasets.imdb.load_data(
    num_words=max_features
)

print(len(x_train), "Training sequences")
print(len(x_val), "Validation sequences")

x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen)
x_val = keras.preprocessing.sequence.pad_sequences(x_val, maxlen=maxlen)

x_train.shape, y_train.shape
# ((25000, 200), (25000,))
根据你的模型

model = models.Sequential()
model.add(layers.Dense(16,activation="relu",input_shape=(maxlen,)))
model.add(layers.Dense(16,activation="relu"))
model.add(layers.Dense(1,activation="sigmoid"))

model.compile(optimizer="rmsprop",loss="binary_crossentropy", metrics=["acc"])
model.fit(x_train, y_train, batch_size=32, epochs=2, validation_data=(x_val, y_val))

你有10000个目标,而你的网络只生产1个。。。将密集(10000,activation=“sigmoid”)设置为最后一层
Epoch 1/2
782/782 [==============================] - 5s 4ms/step - loss: 164.2350 - acc: 0.5018 - val_loss: 1.0527 - val_acc: 0.5000
Epoch 2/2
782/782 [==============================] - 3s 4ms/step - loss: 1.0677 - acc: 0.4978 - val_loss: 0.7446 - val_acc: 0.5000