![](/img/trans.png)
[英]tf2.0 Keras: unable to save weights when using custom tensorflow code for RNN
[英]custom rnn migration to tensorflow 2.0
我需要將我在 tensorflow 1.x 中的自定義 RNN 實現中的以下部分遷移到 tensorflow 2.x。
我有點卡在需要使用初始化程序(例如 tf.variable_scope 內的 xaver 初始化程序)轉換 tf.get_variable 的地方。
我已經參考了遷移指南,但我仍然無法理解 tf.get_variable 與 xavier 初始化的轉換,而且我必須遷移一些沒有預定義形狀的占位符。
with tf.variable_scope(self._scope):
with tf.variable_scope("PresentState"):
self._U = tf.get_variable("U", shape=[self._num_in, self._n_hidden], dtype=tf.float32,
initializer=xavier_initializer())
self._W = tf.get_variable("W", shape=[self._n_hidden, self._n_hidden],
dtype=tf.float32,
initializer=xavier_initializer())
self._b = tf.get_variable("B", shape=[self._n_hidden], dtype=tf.float32,
initializer=xavier_initializer())
self._p = None
占位符部分。
p = tf.placeholder(tf.float32, shape=[batch_size, None, num_in], name="p")
在慣用的 TF2.x 代碼中,您不應使用 tf.Placeholders,而是將它們定義為可調用@tf.function
函數參數。 由於 TF2.x 現在支持急切執行,您不需要任何tf.Session
調用,因此可以將您的普通 python 變量傳遞給任何@tf.function
。
對於您問題的第一部分:
我對tf.variable_scope
不是很深入,但從您的代碼來看,您似乎可以將內部tf.variable_scope
重構為tf.Module
,這允許您按如下方式使用 xavier 初始化(未測試):
class PresentState(tf.Module):
def __init__(self, ins, hiddens, outs):
initializer = tf.initializers.GlorotNormal() # Xavier initialization
self._U = tf.Variable(initializer([ins, outs]), dtype=tf.float32)
self._W = tf.Variable(initializer([ins, outs]), dtype=tf.float32)
self._b = tf.Variable(initializer([outs]), dtype=tf.float32)
self._p = None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.