Keras промежуточный слой вывода для расчета потерь

Я использую Keras с theano для обучения модели автоэнкодера. Я хочу использовать представление модели на промежуточном уровне, чтобы выполнить какой-то конкретный расчет в функции потерь (пользовательская функция потерь для той же модели).

Как я мог это сделать?

Я могу вывести промежуточный слой из модели. Но тогда он будет обучен с использованием 2 выходов вместо одного. Я хочу тренировать модель только с использованием окончательного результата.

1 ответ

Я думаю, что я понял это.

model1 = Model(input=x, output=y1)
model2 = Model(input=x, output=[y2,y3])

model1.compile((optimizer='sgd', loss=cutom_loss_function)
model2.compile((optimizer='sgd', loss=cutom_loss_function)

model2.fit(data, [targets2, targets3], , nb_epoch=epochs, batch_size=batch_size, verbose=2, shuffle=True, validation_split=0.1, callbacks=[checkpointer])

Тем не менее, я хочу, чтобы мой cutom_loss_function чтобы получить доступ к выводу model1, (y1) рассчитать потери. Но когда я использую model1.output[0] внутри cutom_loss_function() это дает ошибку ниже.

ValueError: GpuElemwise. Input dimension mis-match. Input 1 (indices start at 0) has shape[2] == 48, but the output's size on that axis is 2304.
Apply node that caused the error: GpuElemwise{Composite{sqr((i0 - scalar_sigmoid((i1 + i2))))}}[(0, 1)](GpuDimShuffle{x,0,1,2}.0, GpuCorrMM{half, (1, 1)}.0, GpuReshape{4}.0)
Toposort index: 341
Inputs types: [CudaNdarrayType(float32, (True, False, False, False)), CudaNdarrayType(float32, 4D), CudaNdarrayType(float32, (True, True, True, True))]
Inputs shapes: [(1, 1, 2304, 2), (1, 1, 48, 48), (1, 1, 1, 1)]
Inputs strides: [(0, 0, 1, 2304), (0, 0, 48, 1), (0, 0, 0, 0)]
Inputs values: ['not shown', 'not shown', CudaNdarray([[[[ 0.]]]])]
Outputs clients: [[GpuReshape{2}(GpuElemwise{Composite{sqr((i0 - 
scalar_sigmoid((i1 + i2))))}}[(0, 1)].0, MakeVector{dtype='int64'}.0)]]

HINT: Re-running with most Theano optimization disabled could give you a back-trace of when this node was created. This can be done with by setting the Theano flag 'optimizer=fast_compile'. If that does not work, Theano optimizations can be disabled with 'optimizer=None'.
HINT: Use the Theano flag 'exception_verbosity=high' for a debugprint and storage map footprint of this apply node.
Другие вопросы по тегам