分割层输出时,Keras 抛出“Tensor”对象没有属性“_keras_shape”
Posted
技术标签:
【中文标题】分割层输出时,Keras 抛出“Tensor”对象没有属性“_keras_shape”【英文标题】:Keras throws `'Tensor' object has no attribute '_keras_shape'` when splitting a layer output 【发布时间】:2018-05-16 22:16:47 【问题描述】:
我有一个维度为2*1*300
的句子对的句子嵌入输出X。我想将此输出拆分为两个形状为1*300
的向量,以计算其绝对差和乘积。
x = MaxPooling2D(pool_size=(1,MAX_SEQUENCE_LENGTH),strides=(1,1))(x)
x_A = Reshape((1,EMBEDDING_DIM))(x[:,0])
x_B = Reshape((1,EMBEDDING_DIM))(x[:,1])
diff = keras.layers.Subtract()([x_A, x_B])
prod = keras.layers.Multiply()([x_A, x_B])
nn = keras.layers.Concatenate()([diff, prod])
目前,当我执行x[:,0]
时,它会抛出一个错误说AttributeError: 'Tensor' object has no attribute '_keras_shape'
。我假设张量对象拆分的结果是一个没有_keras_shape
的张量对象。
有人可以帮我解决这个问题吗?谢谢。
【问题讨论】:
您好,我正在尝试通过自己完成代码来运行您的代码,但无法收到您遇到的错误...您可以发布完整的代码吗? 编译模型时出现错误。下面的答案修复了它。谢谢:) 【参考方案1】:Keras 在分层处理时向张量添加一些信息。由于您将张量拆分到外层,因此它会丢失该信息。
解决方案涉及从 Lambda 层返回拆分张量:
x_A = Lambda(lambda x: x[:,0], output_shape=notNecessaryWithTensorflow)(x)
x_B = Lambda(lambda x: x[:,1], output_shape=notNecessaryWithTensorflow)(x)
x_A = Reshape((1,EMBEDDING_DIM))(x_A)
x_B = Reshape((1,EMBEDDING_DIM))(x_B)
【讨论】:
以上是关于分割层输出时,Keras 抛出“Tensor”对象没有属性“_keras_shape”的主要内容,如果未能解决你的问题,请参考以下文章
如何找出概率输出中每列的哪个类对应于使用Keras进行多类分类?
Tensor Flow V2:基于Tensor Flow Keras的摄氏度到华氏度温度转换的训练模型