Как получить несколько выходов только с одной целью в керасе? - PullRequest
0 голосов
/ 31 октября 2019

Я бы хотел тренировать CNN с керасом для проецирования 3D-изображений в 2D-изображения. Для проверки мне нужен вывод весов одного промежуточного слоя.

Поскольку изображения исправляются и прогнозируются наложением, я не могу использовать следующий пример кода для вывода промежуточного слоя.

from keras.models import Model

model = ...  # create the original model

layer_name = 'my_layer'
intermediate_layer_model = Model(inputs=model.input,
                                 outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)

Вместо этого я хочу, чтобы train уже выводил объединенный промежуточный слой с целевым слоем.

u = Conv3D(2, proj.kern)(u4)
z = Lambda(lambda x: softmax(x, axis=1+proj_axis))(u)
p = Multiply()([inp, z])

# perform surface projection by summing over weighted Z values
proj = Lambda(lambda x: K.sum(x, axis=1+proj_axis, keepdims=True))(p)


model_projection = Model(inp, [p, proj])

Я понимаю, что keras ожидает, что форма output будет такой же, как Y для расчета потерь. Я также работал через

https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models

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

model.train(X,Y, validation_data=(X_val,Y_val))

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays

Я не уверен, если

model.train(X,[Y,Y], validation_data=(X_val,Y_val))

предоставит мне подходящую модель?

...