首页 > 解决方案 > 神经网络的输入大小不匹配

问题描述

我是机器学习的新手,正在尝试为 mnist 时尚数据集构建 CNN,但这个程序中有一些错误说

ValueError:检查输入时出错:预期 conv2d_input 有 4 个维度,但得到了形状为 (60000, 28, 28) 的数组

我尝试了很多解决方案,但没有一个真正奏效。

(x_train,y_train),(x_test,y_test) = mnist_fashion.load_data()
mnist_fashion = tf.keras.datasets.fashion_mnist
x_train,x_test = x_train/255,x_test/255

model = Sequential([

    Conv2D(64,(4,4),activation='relu',input_shape = (28,28,1), padding='same'),
    MaxPooling2D(pool_size=(2,2)),
    Dropout(0.1),

    Conv2D(64,(4,4),activation='relu'),
    MaxPooling2D(pool_size=(2,2)),
    Dropout(0.3),

    Flatten(),

    Dense(256,activation='relu'),
    Dropout(0.5),

    Dense(64,activation='relu'),

    Dense(10,activation='softmax')
])

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

model.fit(x_train,y_train,epochs=5)

标签: pythontensorflowmachine-learningkeras

解决方案


将您的数据从 重塑(60000, 28, 28)(60000, 28, 28, 1)

x_train, x_test = np.expand_dims(x_train, -1), np.expand_dims(x_test, -1)

您可能还想提供一次性编码标签。要转换为 one-hot 编码标签,请执行以下操作:

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(n_values=10)
y_train = encoder.fit_transform(np.expand_dims(y_train, -1))
y_test = encoder.transform(np.expand_dims(y_test, -1))

推荐阅读