Я бы хотел тренировать 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))
предоставит мне подходящую модель?