【问题标题】:ValueError, Error when checking target: expected dense_1 to have 4 dimensionsValueError,检查目标时出错:预期的 dense_1 有 4 个维度
【发布时间】:2018-11-04 19:32:37
【问题描述】:

我正在尝试微调 MobileNet,但收到以下错误:

ValueError, Error when checking target: expected dense_1 to have 4 dimensions, but got array with shape (10, 14)

我设置目录迭代器的方式有什么冲突吗?

train_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
train_path, target_size=(224, 224), batch_size=10)
valid_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
valid_path, target_size=(224, 224), batch_size=10)

test_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
test_path, target_size=(224, 224), batch_size=10, shuffle=False)

我的新瓶颈层如下:

x=mobile.layers[-6].output
predictions = Dense(14, activation='softmax')(x)

model = Model(inputs=mobile.input, outputs=predictions)

【问题讨论】:

    标签: tensorflow keras deep-learning conv-neural-network transfer-learning


    【解决方案1】:

    由于 Dense layer is applied on the last axis of its input 并考虑到 x 是 4D 张量这一事实,predictions 张量也将是 4D 张量。这就是模型需要 4D 输出(即expected dense_1 to have 4 dimensions)但您的标签是 2D(即but got array with shape (10, 14))的原因。要解决此问题,您需要将 x 设为 2D 张量。一种方法是使用Flatten 层:

    x = mobile.layers[-6].output
    x = Flatten()(x)
    predictions = Dense(14, activation='softmax')(x)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 2018-04-11
      • 2019-11-18
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多