簡體   English   中英

自定義 rnn 遷移到 tensorflow 2.0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM