如何解决将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 举报,一经查实,本站将立刻删除。