machine-learning - 当我用 tensorflow 2.0 训练 VGG 时,为什么我的准确率没有提高,只保持在 25% 左右
问题描述
def get_model():
gmodel=Sequential([
Conv2D(64, (3, 3), activation='relu', input_shape=(256,256,3)),
Conv2D(64,(3,3),activation='relu'),
MaxPooling2D((1,1),strides=2,padding='same'),
Conv2D(128, (3, 3), activation='relu'),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D((1,1), strides=2, padding='same'),
Conv2D(256, (3, 3), activation='relu'),
Conv2D(256, (3, 3), activation='relu'),
MaxPooling2D((1,1), strides=2, padding='same'),
Conv2D(512, (3, 3), activation='relu'),
Conv2D(512, (3, 3), activation='relu'),
MaxPooling2D((1,1), strides=2, padding='same'),
Conv2D(512, (3, 3), activation='relu'),
Conv2D(512, (3, 3), activation='relu'),
MaxPooling2D((1,1), strides=2, padding='same'),
Flatten(),
Dense(4, activation='softmax')
])
return gmodel
model=get_model()
model.compile(
optimizer=tf.keras.optimizers.Adam(0.0001),
loss="sparse_categorical_crossentropy",
metrics=['accuracy']
)
history=model.fit(train,epochs=5)
我想使用 VGG 模型将图片分类为 4 类,但准确率始终在 25% 左右。我检查了图片和标签,它们都是正确的,我也尝试了其他一些模型和优化器,但准确性也没有太大的提高。我应该怎么办。我的 GPU 是 2070,tensorflow 是 2.0,python 是 3.6
解决方案
池化层
MaxPooling2D((1,1),strides=2,padding='same')
导致信息丢失。池化窗口小于步幅。这基本上是通过丢弃每个备用像素上的信息来工作的。所以,这可能是模型没有学习的原因。只需将池化层更改为:
MaxPooling2D((2, 2), strides=2, padding='SAME')
可以解决这个问题。
推荐阅读
- visual-studio - 如何在 VisualStudio 2017 的 ASP.net 项目中使用 Bootstrap-Vue?
- c# - SQL 脚本的 C# Linq 等效项没有响应
- python - 在键入文本时使散景 TextInput 回调响应
- python - 全局 numpy 数组在函数内部发生更改,但没有对其进行全局引用
- pseudocode - 记录类型伪代码的问题,显示每行的最后一列
- c++ - 从构造函数中的 catch 块调用析构函数是否安全?
- javascript - 渲染在异步方法结束之前运行。如何从我的异步方法将道具传递给组件?
- java - 之间的区别?扩展与 E 扩展
- database - 如何映射单个位置并一次绘制一个圆圈,而不是一组位置?
- java - Constructors and unknown array sized; prompts in the main method (best practice)