tensorflow - 检查目标时出错:预期 dense_18 的形状为 (1,) 但得到的数组的形状为 (10,)
问题描述
Y_train = to_categorical(Y_train, num_classes = 10)#
random_seed = 2
X_train,X_val,Y_train,Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed)
Y_train.shape
model = Sequential()
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size = 86, epochs = 3,validation_data = (X_val, Y_val), verbose =2)
我必须将 MNIST 数据分为 10 个类。我正在将 Y_train 转换为一个热编码数组。我已经经历了许多答案,但没有一个有帮助。请在这方面指导我,因为我是 ML 和神经网络的新手。
解决方案
似乎没有必要model.add(Flatten())
在您的第一层使用。代替这样做,您可以使用具有特定输入大小的密集层,例如:model.add(Dense(64, input_shape=your_input_shape, activation="relu")
.
为确保由于层而发生此问题,您可以检查to_categorical()
函数是否单独与 jupyter notebook 一起使用。
更新的答案
在模型之前,你应该重塑你的模型。在那种情况下,28 * 28 到 784。
train_images = train_images.reshape((-1, 784))
test_images = test_images.reshape((-1, 784))
我还建议通过简单地将图像划分为 255 来规范化可以完成的数据
在该步骤之后,您应该创建模型。
model = Sequential([
Dense(64, activation='relu', input_shape=(784,)),
Dense(64, activation='relu'),
Dense(10, activation='softmax'),
])
你有没有注意到input_shape=(784,)
那是你扁平化输入的形状。
最后一步,编译和拟合。
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'],
)
model.fit(
train_images,
train_labels,
epochs=10,
batch_size=16,
)
您所做的是您刚刚展平了输入层,而没有向网络提供输入。这就是您遇到问题的原因。关键是您应该手动重塑输入并使用参数前馈给Dense()
图层input_shape
推荐阅读
- qt - qt.qpa.plugin:无法在“”中加载 Qt 平台插件“xcb”,即使它已找到
- html - 嘿,我有一个图像横幅,在循环中向左移动,但我想在悬停时为这些图像添加文本。谢谢
- r - 使用 R 中的邮政编码在美国创建自定义销售区域
- python - 如何使用 Python 在 Gmail API 和 JSON 中获取嵌套数据
- swift - 以编程方式编码应用程序后启动屏幕
- excel - 在某些日期添加撇号的电子表格
- c++ - 为什么字符串声明会终止 VScode 中的程序?
- flutter - 我想从 api 获取用户数据,但它告诉我它是空的
- java - 将包含另一个 JSON 字符串的 JSON 对象解析为对象
- java - 关于arraylist add() 返回类型