Я работаю над проблемой street2shop, которая включает в себя обработку изображений на keras.Это использует несколько изображений в качестве входных данных и пользовательских потерь (триплетная потеря).Я хочу знать, как именно данные передаются от модели к потере, потере процесса, если я использую пакеты (например, 10), а затем обновлять вес модели?
вот мой режим:
def get_model():
no_top_model = InceptionV3(include_top=False, weights='imagenet', pooling='avg')
x = no_top_model.output
x = Dense(512, activation='elu', name='fc1')(x)
x = Dense(128, name='fc2')(x)
x = Lambda(lambda x: K.l2_normalize(x, axis=1), name='l2_norm')(x)
return Model(no_top_model.inputs, x)
base_model = get_model()
def get_my_model(base_model):
a_in = Input((img_size,img_size,3))
p_in = Input((img_size,img_size,3))
n_in = Input((img_size,img_size,3))
a_out = base_model(a_in)
p_out = base_model(p_in)
n_out = base_model(n_in)
merged_vector = concatenate([a_out, p_out, n_out], axis=-1)
#print(merged_vector)
model = Model(inputs=[a_in, p_in, n_in], outputs=merged_vector)
return model
model=get_my_model(base_model)
и вот моя функция потерь:
def margin_triplet_loss(y_true, y_pred, margin=.3):
loss1=0
for i in range(0,batch_size):
out_a = y_pred[:, 0:128]
out_p = y_pred[:, 128:256]
out_n = y_pred[:, 256:384]
loss = K.maximum(margin
+ K.sum(K.square(out_a-out_p), axis=1)
- K.sum(K.square(out_a-out_n), axis=1),
0.0)
loss1=loss1+loss
return loss1/batch_size
В функции потерь я хочу взять вложение каждого изображения a_in, p_in и n_in и вычислить потери, но я немного уверен, что нарезкамассив неверен.Будет очень полезно, если кто-нибудь объяснит поток данных между моделью и потерей или пришлет мне ссылку, чтобы понять это.