【问题标题】:Working on using Keras VGG16 -- Trouble output shapes使用 Keras VGG16 -- 输出形状问题
【发布时间】:2018-05-12 12:38:09
【问题描述】:

我正在尝试从头开始训练 VGG16 模型(来自 keras.applications),但出现了一个奇怪的错误

X_train 形状为 (73257, 48, 48, 3)

Y_train 形状为 (73257, 10)

我不知道发生了什么...我认为它与之前的 conv 层有关,但由于我是直接从 keras 导入模型,所以我无法确定我哪里出错了。

我的数据集由 73,257 张具有 (48,48,3) 形状的图像组成。我本质上是在尝试进行字符识别(想想 mnist 风格),但我对通过模型进行输入(权重设置为 0)感到困惑。

model = keras.applications.vgg16.VGG16(include_top=False,
                                       weights=None,
                                       input_shape=(48, 48, 3),
                                       input_tensor=None, pooling='avg', classes=10)
sgd = SGD(lr=.1)

model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])
print('X_train shape is {}'.format(X_train.shape))
print('Y_train shape is {}'.format(y_train.shape))

model.fit(X_train, y_train,
          epochs=20,
          batch_size=128)

score = model.evaluate(X_test, y_test, batch_size=128)

这是我遇到的错误

文件“/home/codebrotherone/PycharmProjects/Computer Vision/deep_neural/dnn.py”,第 169 行,在 VGG16 批量大小=128)

文件“/home/codebrotherone/anaconda2/envs/tensorflow/lib/python3.4/site-packages/keras/engine/training.py”,第 1574 行,适合 批量大小=批量大小)

文件“/home/codebrotherone/anaconda2/envs/tensorflow/lib/python3.4/site-packages/keras/engine/training.py”,第 1411 行,在 _standardize_user_data exception_prefix='目标')

文件“/home/codebrotherone/anaconda2/envs/tensorflow/lib/python3.4/site-packages/keras/engine/training.py”,第 141 行,在 _standardize_input_data str(array.shape))

ValueError: 检查目标时出错:预期 block5_pool 有 4 个维度,但得到了形状为 (73257, 10) 的数组

【问题讨论】:

    标签: python-3.x machine-learning computer-vision keras keras-layer


    【解决方案1】:

    理想情况下,对于分类问题,您应该有include_top=Trueclasses=10

    这就够了。由于您不包括顶部,并且正在使用全局池,因此您最终应该得到类似 (73257,512) 的结果。但是您收到的消息表明您在此尝试中没有使用池化。有些东西不太匹配。

    不管怎样,就这样吧:

    model = keras.applications.vgg16.VGG16(include_top=True,
                                       input_shape=(48, 48, 3),
                                       classes=10)
    

    【讨论】:

    • 非常感谢您的回复.. 但我想将权重设置为无,当我尝试运行时,它只是在 0.0000E10 左右徘徊以确保准确性......有哪些方法可以确定批量大小?有一般的经验法则吗?
    • 我刚刚尝试了 batch_size = 100, 20 epochs(仍在运行),我的准确率正在下降,而我的损失从 -788 开始,然后到 nan...
    • 好的,可以加weights=None,没问题。 Nan 可能是由于数学错误(例如除以零)和其他我不太了解的事情。您的批量大小应该适合您的内存和处理时间。 (继续测试以获得最佳性能)。 --- 我认为如果所有输入都低于零,“relu”可能是 Nan 的原因。这可以通过将权重初始化为正数来解决。 --- 还要注意有一个preprocess_input 函数要从vgg16 模块导入以适应caffe 图像格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多