【发布时间】:2021-09-20 04:41:21
【问题描述】:
我正在尝试使用 Tensorflow 为 CIFAR-10 数据集实现 VGG-16 卷积神经网络。但我的训练准确率接近 10%。我的代码有什么问题?
import tensorflow as tf
from tensorflow.keras import datasets
(X_train, y_train), (X_test, y_test) = datasets.cifar10.load_data()
X_train.shape, y_train.shape, X_test.shape, y_test.shape
X_train = X_train/255
X_test = X_test/255
y_train = y_train.reshape(-1,)
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation="relu", input_shape=
(32,32,3),padding="same"),
tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2)),
tf.keras.layers.Conv2D(filters=128, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=128, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2)),
tf.keras.layers.Conv2D(filters=256, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=256, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=256, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2)),
tf.keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2)),
tf.keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation="relu",
padding="same"),
tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(4096, activation="relu"),
tf.keras.layers.Dense(4096, activation="relu"),
tf.keras.layers.Dense(10, activation="softmax")
])
model.summary()
model.compile(loss=tf.keras.losses.sparse_categorical_crossentropy,
optimizer=tf.keras.optimizers.Adam(),
metrics=["accuracy"])
X_train[0].shape, y_train[0].shape
model.fit(X_train, y_train, epochs = 100)
【问题讨论】:
-
你注意到你的损失没有减少吗?
-
是的....但是,我找不到原因....
-
使用经过调整的学习率的普通 SGD,直到损失减少,Adam 并不总是工作,而 VGG 是一个边缘情况,它通常会失败。
-
我试过了....但是没有任何改进....你认为代码有什么问题吗??
标签: tensorflow keras deep-learning conv-neural-network vgg-net