在最后一层中使用Eulidean损失转移学习

时间:2017-12-27 00:12:48

标签: python computer-vision deep-learning keras conv-neural-network

非常感谢有人可以帮助我:

我正在尝试对回归任务进行一些转移学习 - 我的输入是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)数组,numpytrain_y (168435,)数组。 numpytest_x也是如此,但观察次数为test_y

我在42509 add_new_last_continuous_layer()``函数中遇到了TypeError: Tensor object is not iterable错误。你能不能给我一些指导来解决这个问题,问题是什么?非常感谢和节日快乐!

0 个答案:

没有答案