【问题标题】:Transfer learning with Keras: Input shape mismatch使用 Keras 进行迁移学习:输入形状不匹配
【发布时间】:2019-12-25 13:16:53
【问题描述】:

我正在使用带有 keras 的预训练模型运行分类和预测神经网络算法。 现在我知道 keras 的输入形状为 (224,224,3),但我的输入形状为 (180, 200, 20),我收到以下错误:

ValueError: Dimension 0 in both shapes must be equal, but are 3 and 64. Shapes are [3,3,20,64] and [64,3,3,3]. for 'Assign_32' (op: 'Assign') with input shapes: [3,3,20,64], [64,3,3,3].

这里是代码:

from keras import applications
from keras.layers import Input

input_tensor = Input(shape = (180, 200, 20))
vgg_model = applications.VGG16(weights = 'imagenet', include_top = False, input_tensor = input_tensor)
vgg_model.summary()

知道如何解决这个问题吗?谢谢

【问题讨论】:

    标签: python keras neural-network transfer-learning


    【解决方案1】:

    来自Documentation

    input_shape:可选的形状元组,仅在 include_top 时指定 为 False (否则输入形状必须为 (224, 224, 3) (使用 'channels_last' 数据格式)或 (3, 224, 224) (使用 'channels_first' 数据格式)。它应该正好有 3 个输入通道,宽度和 高度不应小于 32。例如(200, 200, 3) 将是一 有效值。

    您可以尝试从此链接从头开始创建 vgg16。 VGG16 model for Keras

    【讨论】:

      【解决方案2】:

      您需要调整输入图像的大小

      from keras.preprocessing import image
      img = image.load_img("image1.jpeg",target_size=(224,224))
      

      如果您想学习在 keras 中从头开始进行迁移学习,您可以阅读这篇文章。这篇文章有一步一步的实现。 https://medium.com/@1297rohit/transfer-learning-from-scratch-using-keras-339834b153b9

      【讨论】:

      • 谢谢。但我不是在图像上训练我的模型,而是在体素网格(这是来自 LiDAR 的点云数据的表示)上训练它,我试图看看在这种情况下迁移学习是否对我有帮助
      • 你可以在任何东西上使用卷积进行训练。它不是特定于图像的
      【解决方案3】:

      在您的情况下,由于您没有处理正确大小(或通道数)的图像,您可能希望剪切大部分 vgg 网络以仍然保存中间层中包含的信息,但我是不知道效率如何。

      您需要移除第一个卷积层,以及最后的所有密集层,用您自己的层替换它们。您当然需要重新训练整个网络,因此您将进行非常智能的初始化,而不是迁移学习。

      【讨论】:

      • 谢谢你的建议,我也有同样的想法,因为输出大小不一样,我以为我只需要 10 个卷积层(来自 VGG16)并将最后一个块和密集层替换为我自己的图层来完成所需的任务。
      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 2020-10-24
      • 2020-10-10
      • 2018-02-10
      • 2023-03-27
      • 2019-03-08
      相关资源
      最近更新 更多