Объект 'Tensor' не имеет атрибута _keras_history
Я хотел извлечь и применить самостоятельно Conv2D
слой на столбцах моих входных тензоров, но после добавления кода:
accelerometer_input = Input(shape=(1400, 3))
for i in range(3):
out = Lambda(lambda x: x[:,:, i:i+1])(accelerometer_input) # Extracting the ith channel
out = K.expand_dims(out, axis=1)
out = Conv2D(64, (30, 1), data_format="channels_first")(out)
branch_outputs.append(out)
out_put = K.concatenate(branch_outputs)
это дает мне ошибку в названии. Я думаю, что это связано с Lambda
слой или извлечение, которое не дифференцируется.
Но как мне обойтись без этого?
1 ответ
Это потому, что вы непосредственно применяете бэкэнд-функцию (т.е. K.expand_dims()
) на тензоре Кераса (т.е. out
) и, следовательно, результатом будет тензор (а не тензор Кераса). Фактически, Keras Tensor является расширенной версией Tensor и имеет дополнительные атрибуты (например, _keras_history
), который помогает Керасу построить модель. Теперь, чтобы решить эту проблему, вам просто нужно поместить бэкэнд-функцию в Lambda
слой для вывода тензора Кераса:
out = Lambda(lambda x: K.expand_dims(x, axis=1))(out)
То же самое относится и к использованию K.concatenate()
, Однако в этом случае в Keras есть специальный слой для него:
from keras.layers import concatenate, Concatenate
# use functional interface
out_put = concatenate(branch_outputs)
# or use layer class
out_put = Concatenate()(branch_outputs)