我想在输入张量的列上分别提取并应用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
层或提取不可区分的。
但是如果没有它我该怎么办?
答案 0 :(得分:2)
那是因为您直接在Keras张量(即K.expand_dims()
)上应用了后端函数(即out
),因此结果将是一个Tensor(而不是Keras Tensor)。实际上,Keras Tensor是Tensor的增强版本,具有其他属性(例如_keras_history
),可帮助Keras构建模型。现在,要解决此问题,只需将后端函数放在Lambda
层中,以将Keras Tensor作为输出:
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)