Tensorflow Vgg-16尝试训练MNIST数据集时生成错误

Tensorflow Vgg-16尝试训练MNIST数据集时生成错误,tensorflow,keras,conv-neural-network,mnist,vgg-net,Tensorflow,Keras,Conv Neural Network,Mnist,Vgg Net,我试图在MNIST数据集上创建一个带有Tensorflow和Keras的Vgg-16模型。 我已成功构建模型,但在训练MNIST数据集时出错。 我已经检查了这个错误的不同解决方案,但它似乎不起作用,因为我是这个领域的新手 产生的错误 模型构建 MNISt数据集 训练 最后一层应该输出10个值,因为MNIST包含10个类 model.add(Dense(units=10, activation="softmax")) 我复制了你的代码并运行了它。一旦你改变顶层有10个神经元,

我试图在MNIST数据集上创建一个带有Tensorflow和Keras的Vgg-16模型。 我已成功构建模型,但在训练MNIST数据集时出错。 我已经检查了这个错误的不同解决方案,但它似乎不起作用,因为我是这个领域的新手

产生的错误

模型构建

MNISt数据集

训练


最后一层应该输出10个值,因为MNIST包含10个类

model.add(Dense(units=10, activation="softmax"))

我复制了你的代码并运行了它。一旦你改变顶层有10个神经元,它就会毫无错误地运行。然而,你的模型训练不好。我在下面提供了一个简单的模型,它训练得很好。我还将您的测试集作为验证集。代码如下

model = tf.keras.Sequential([
    Conv2D(16, 3, padding='same', activation='relu', input_shape=input_shape ),
    MaxPooling2D(strides=1),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Conv2D(128, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Conv2D(256, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(.3),
    Dense(64, activation='relu'),
    Dropout(.3),
    Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])
print (model.summary())
val_data=(X_test, Y_test)
history = model.fit(X_train, Y_train, validation_data=val_data,
                     batch_size= 128,
                     epochs= 5,
                     verbose= 1)
# after 5  epochs result is accuracy: 0.9883  - val_accuracy: 0.9915

感谢您的回复,我已经更新了它,但仍然得到错误:ValueError:Shapes(None,10,10)和(None,10)不兼容
mnist = tf.keras.datasets.mnist
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

#processing
rows, cols = 28, 28
X_train = X_train.reshape(X_train.shape[0], rows, cols, 1)
X_test = X_test.reshape(X_test.shape[0], rows, cols, 1)
input_shape = (rows, cols, 1)

Y_train = tf.keras.utils.to_categorical(Y_train, 10)
Y_test = tf.keras.utils.to_categorical(Y_test, 10)

#  Normalize
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train = X_train / 255.0
X_test = X_test / 255.0
history = model.fit(X_train, Y_train,
                     batch_size= 128,
                     epochs= 5,
                     verbose= 1)
model.add(Dense(units=10, activation="softmax"))
model = tf.keras.Sequential([
    Conv2D(16, 3, padding='same', activation='relu', input_shape=input_shape ),
    MaxPooling2D(strides=1),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Conv2D(128, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Conv2D(256, 3, padding='same', activation='relu'),
    MaxPooling2D(strides=1),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(.3),
    Dense(64, activation='relu'),
    Dropout(.3),
    Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])
print (model.summary())
val_data=(X_test, Y_test)
history = model.fit(X_train, Y_train, validation_data=val_data,
                     batch_size= 128,
                     epochs= 5,
                     verbose= 1)
# after 5  epochs result is accuracy: 0.9883  - val_accuracy: 0.9915