非常感谢有人可以帮助我:
我正在尝试对回归任务进行一些转移学习 - 我的输入是200X200
RGB图像,我的预测输出/标签是一组实际值(假设在{{1}内)虽然缩放在这里不是什么大问题......?)---在[0,10]
架构之上。以下是我的函数,它采用预训练的InceptionV3
模型,删除最后一层并为转移学习添加新图层...
Inception
以下是我的实施:
"""
Transfer learning functions
"""
IM_WIDTH, IM_HEIGHT = 299, 299 #fixed size for InceptionV3
NB_EPOCHS = 3
BAT_SIZE = 32
FC_SIZE = 1024
NB_IV3_LAYERS_TO_FREEZE = 172
def eucl_dist(inputs):
x, y = inputs
return ((x - y)**2).sum(axis=-1)
def add_new_last_continuous_layer(base_model):
"""Add last layer to the convnet
Args:
base_model: keras model excluding top, for instance:
base_model = InceptionV3(weights='imagenet',include_top=False)
Returns:
new keras model with last layer
"""
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(FC_SIZE, activation='relu')(x)
predictions = Lambda(eucl_dist, output_shape=(1,))(x)
model = Model(input=base_model.input, output=predictions)
return model
def setup_to_transfer_learn_continuous(model, base_model):
"""Freeze all layers and compile the model"""
for layer in base_model.layers:
layer.trainable = False
model.compile(optimizer='rmsprop',
loss= 'eucl_dist',
metrics=['accuracy'])
其中base_model = InceptionV3(weights = "imagenet",
include_top=False, input_shape=(3,200,200))
model0 = add_new_last_continuous_layer(base_model)
setup_to_transfer_learn_continuous(model0, base_model)
history=model0.fit(train_x, train_y, validation_data = (test_x, test_y), nb_epoch=epochs, batch_size=32)
scores = model0.evaluate(test_x, test_y, verbose = 0)
features = model0.predict(X_train)
是train_x
(168435, 3, 200, 200)
数组,numpy
是train_y
(168435,)
数组。 numpy
和test_x
也是如此,但观察次数为test_y
。
我在42509
add_new_last_continuous_layer()``函数中遇到了TypeError: Tensor object is not iterable
错误。你能不能给我一些指导来解决这个问题,问题是什么?非常感谢和节日快乐!