Tensorflow compute_output_shape()不适用于自定义层

Tensorflow compute_output_shape()不适用于自定义层,tensorflow,Tensorflow,我在Keras中创建了一个自定义层(称为GraphGather),但输出张量打印为: 张量(“图形集合/Tanh:0”,形状=(?,?),数据类型=浮点32) 由于某种原因,形状返回为(??),这导致下一个致密层产生以下错误: ValueError:应定义密集输入的最后一个维度。找到无 GraphGather图层代码如下所示: 类图形采集器(tf.keras.layers.Layer): 定义初始值(自身、批次大小、批次中的摩尔数、激活值=无,**kwargs): self.batch\u si

我在Keras中创建了一个自定义层(称为GraphGather),但输出张量打印为:

张量(“图形集合/Tanh:0”,形状=(?,?),数据类型=浮点32)

由于某种原因,形状返回为(??),这导致下一个致密层产生以下错误:

ValueError:应定义
密集
输入的最后一个维度。找到

GraphGather图层代码如下所示:

类图形采集器(tf.keras.layers.Layer):
定义初始值(自身、批次大小、批次中的摩尔数、激活值=无,**kwargs):
self.batch\u size=批次大小
self.num\u mols\u in\u batch=num\u mols\u in\u batch
self.activation\u fn=activation\u fn
超级(绘图者,自我)。\uuuuu初始值(**kwargs)
def构建(自我,输入_形状):
超级(绘图者,自我)。构建(输入形状)
def呼叫(自我、x、**kwargs):
#某些操作(省略了大部分def调用)
out_tensor=_操作的结果()#这一行是伪代码
如果self.activation_fn不是None:
输出张量=自激活(输出张量)
out\u张量=out\u张量
返回张量
def计算输出形状(自身、输入形状):
返回(批处理中的self.num\u mols\u,2*输入\u形状[0][1]))

我还尝试将compute_output_形状硬编码为:
python def计算输出形状(自身、输入形状): 返回(64150) ``` 然而,打印时的输出张量仍然是

张量(“图形集合/Tanh:0”,形状=(?,?),数据类型=浮点32)

这会导致上面写入的ValueError


系统信息
  • 已经编写了自定义代码
  • **操作系统平台和发行版*:Linux Ubuntu 16.04
  • TensorFlow版本(使用下面的命令):1.5.0
  • Python版本:3.5.5

    • 我也有同样的问题。我的解决方法是在调用方法中添加以下行:

      input_shape = tf.shape(x)
      
      然后:

      return tf.reshape(out_tensor, self.compute_output_shape(input_shape))
      

      我还没有遇到任何问题。

      也许它希望在下一层中有相同数量的示例,而问题在于批量大小组件的形状?