Python ValueError:形状(100,1)和(100,28,19,1,1)不兼容

Python ValueError:形状(100,1)和(100,28,19,1,1)不兼容,python,keras,Python,Keras,因此,我一直在尝试使用mnist创建一个简单的卷积网络,但在运行它时,产生了以下结果:ValueError:Shapes(100,1)和(100,28,19,1,1)不兼容 我检查了所有示例尺寸,但没有一个创建此尺寸。有什么办法可以避免吗? 这是密码 from keras.models import Sequential from keras.layers import Conv2D from keras.datasets import mnist import matplotlib.pyplo

因此,我一直在尝试使用mnist创建一个简单的卷积网络,但在运行它时,产生了以下结果:
ValueError:Shapes(100,1)和(100,28,19,1,1)不兼容

我检查了所有示例尺寸,但没有一个创建此尺寸。有什么办法可以避免吗? 这是密码

from keras.models import Sequential
from keras.layers import Conv2D
from keras.datasets import mnist
import matplotlib.pyplot as plt
import pandas as pd
from PIL import Image

(x_train_full, y_train_full), (x_test, y_test) = mnist.load_data()
img = Image.open('testimg.png')
img.thumbnail((28, 28), Image.ANTIALIAS)
x_train_full = x_train_full.reshape(list(x_train_full.shape) + [1])
x_valid, x_train = x_train_full[:5000] / 255.0, x_train_full[5000:] / 255.0
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]
model = Sequential()

model.add(Conv2D(1, (1, 1), input_shape=(None, 28, 28, 1), activation='relu'))
model.add(Conv2D(10, (10, 1), input_shape=(None, 28, 28, 1), activation='relu'))
model.add(Conv2D(1, (1, 1), input_shape=(None, 28, 28, 1), activation='softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
hist = model.fit(x_train, y_train, batch_size=100, epochs=100, validation_data=(x_valid, y_valid), use_multiprocessing=True)
res = model.evaluate(x_test, y_test, 128)


您只需要1个
input\u shape=
,第一个。它用于创建图形网络,您可以计算输出形状,该形状将成为下一层的输入形状。所以

model.add(Conv2D(1, (1, 1), input_shape=(None, 28, 28, 1), activation='relu'))
model.add(Conv2D(10, (10, 1), activation='relu'))
model.add(Conv2D(1, (1, 1), activation='softmax'))
应该运行超过该错误,但您将被困在其他地方,因为mnist数据集需要输出为秩2张量,而您的模型将返回秩4。您必须将
'softmax'
从上一个
Conv2D
更改为
'relu'
,然后添加

from keras.layers import Flatten, Dense
model.add(Flatten())
model.add(Dense(10, activation='softmax'))

但是我怀疑有1个或10个内核并且没有池层的CNN模型会给你带来任何好的结果。

你只需要1个
输入\u shape=
,第一个。它用于创建图形网络,您可以计算输出形状,该形状将成为下一层的输入形状。所以

model.add(Conv2D(1, (1, 1), input_shape=(None, 28, 28, 1), activation='relu'))
model.add(Conv2D(10, (10, 1), activation='relu'))
model.add(Conv2D(1, (1, 1), activation='softmax'))
应该运行超过该错误,但您将被困在其他地方,因为mnist数据集需要输出为秩2张量,而您的模型将返回秩4。您必须将
'softmax'
从上一个
Conv2D
更改为
'relu'
,然后添加

from keras.layers import Flatten, Dense
model.add(Flatten())
model.add(Dense(10, activation='softmax'))

但是我怀疑有1个或10个内核并且没有池层的CNN模型会给你带来任何好的结果。

谢谢你的回答!另外,我是否也应该定义密度上的维度?谢谢你的回答!此外,我是否也应该定义密度上的尺寸?