Transfer learning, wrong dense layer's shape

谁说胖子不能爱 提交于 2019-12-24 06:10:50

问题


I am trying to apply transfer learning to my ANN for image classification. I have found an example of it, and I would personalize the network.

Here there are the main blocks of code:

model = VGG19(weights='imagenet',
                  include_top=False,
                  input_shape=(224, 224, 3))
batch_size = 16

for layer in model.layers[:5]:
    layer.trainable = False

x = model.output
x = Flatten()(x)
x = Dense(1024, activation="relu")(x)
x = Dense(1024, activation="relu")(x)
predictions = Dense(16, activation="sigmoid")(x)

model_final = Model(input = model.input, output = predictions)

model_final.fit_generator(
train_generator,
samples_per_epoch = nb_train_samples,
epochs = epochs,
validation_data = validation_generator,
validation_steps = nb_validation_samples,
callbacks = [checkpoint, early])

When I run the code above I get this error:

ValueError: Error when checking target: expected dense_3 to have shape (16,) but got array with shape (1,).

I suppose that the problem is about the dimensions' order in the dense layer, I have tried to transpose it, but I get the same error.


回答1:


Maybe this simple example can help:

import numpy as np

test = np.array([1,2,3])
print(test.shape) # (3,)

test = test[np.newaxis]
print(test.shape) # (1, 3)  

Try apply [np.newaxis] in your train_generator output.



来源:https://stackoverflow.com/questions/54660629/transfer-learning-wrong-dense-layers-shape

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!