将Tensorflow1转换为Tensorflow 2

问题描述

此链接上有一个用tensorflow1编写的代码。 https://github.com/carlthome/tensorflow-convlstm-cell/blob/master/cell.py 我想将此类用作TensorFlow.Keras中的一层。因此应使用TensorFlow版本2编写。 怎么办 这是这段代码: 将tensorflow导入为tf

class ConvLSTMCell(tf.nn.rnn_cell.RNNCell):
  """A LSTM cell with convolutions instead of multiplications.
  Reference:
    Xingjian,S. H. I.,et al. "Convolutional LSTM network: A machine learning approach for precipitation nowcasting." Advances in Neural Information Processing Systems. 2015.
  """

  def __init__(self,shape,filters,kernel,forget_bias=1.0,activation=tf.tanh,normalize=True,peephole=True,data_format='channels_last',reuse=None):
    super(ConvLSTMCell,self).__init__(_reuse=reuse)
    self._kernel = kernel
    self._filters = filters
    self._forget_bias = forget_bias
    self._activation = activation
    self._normalize = normalize
    self._peephole = peephole
    if data_format == 'channels_last':
        self._size = tf.TensorShape(shape + [self._filters])
        self._feature_axis = self._size.ndims
        self._data_format = None
    elif data_format == 'channels_first':
        self._size = tf.TensorShape([self._filters] + shape)
        self._feature_axis = 0
        self._data_format = 'NC'
    else:
        raise ValueError('Unknown data_format')

  @property
  def state_size(self):
    return tf.nn.rnn_cell.LSTMStateTuple(self._size,self._size)

  @property
  def output_size(self):
    return self._size

  def call(self,x,state):
    c,h = state

    x = tf.concat([x,h],axis=self._feature_axis)
    n = x.shape[-1].value
    m = 4 * self._filters if self._filters > 1 else 4
    W = tf.get_variable('kernel',self._kernel + [n,m])
    y = tf.nn.convolution(x,W,'SAME',data_format=self._data_format)
    if not self._normalize:
      y += tf.get_variable('bias',[m],initializer=tf.zeros_initializer())
    j,i,f,o = tf.split(y,4,axis=self._feature_axis)

    if self._peephole:
      i += tf.get_variable('W_ci',c.shape[1:]) * c
      f += tf.get_variable('W_cf',c.shape[1:]) * c

    if self._normalize:
      j = tf.contrib.layers.layer_norm(j)
      i = tf.contrib.layers.layer_norm(i)
      f = tf.contrib.layers.layer_norm(f)

    f = tf.sigmoid(f + self._forget_bias)
    i = tf.sigmoid(i)
    c = c * f + i * self._activation(j)

    if self._peephole:
      o += tf.get_variable('W_co',c.shape[1:]) * c

    if self._normalize:
      o = tf.contrib.layers.layer_norm(o)
      c = tf.contrib.layers.layer_norm(c)

    o = tf.sigmoid(o)
    h = o * self._activation(c)

    state = tf.nn.rnn_cell.LSTMStateTuple(c,h)

    return h,state

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...