1

TensorFlowのBasicRNNCellにあるデフォルトのtanh以外の転送機能を試してみたいと思います。TensorFlow:BasicRNNCellのtanhを別の値に変更しますか?

元の実装は次のようである:

class BasicRNNCell(RNNCell): 
(...) 
def __call__(self, inputs, state, scope=None): 
    """Most basic RNN: output = new_state = tanh(W * input + U * state + B).""" 
    with vs.variable_scope(scope or type(self).__name__): # "BasicRNNCell" 
     output = tanh(linear([inputs, state], self._num_units, True)) 
    return output, output 

...と私はそれを変更:、tf.variable_scopevs.variable_scopeを変更

class MyRNNCell(BasicRNNCell): 
(...) 
def __call__(self, inputs, state, scope=None): 
    """Most basic RNN: output = new_state = tanh(W * input + U * state + B).""" 
    with tf.variable_scope(scope or type(self).__name__): # "BasicRNNCell" 
     output = my_transfer_function(linear([inputs, state], self._num_units, True)) 
    return output, output 

成功したがlinear>はrnn_cell.pyで実装したものです<であり、tfでは利用できません。

これを動作させるにはどうすればよいですか?

linearを完全に再実装する必要がありますか? (私はすでにコードをチェックしていますが、そこにも依存関係の問題があると思います...)

+0

私はテンソルフローに慣れていませんが、tensorflow.python.ops.rnn_cellは組み込み/ベースクラスではありません。クラスを拡張したり、新しいメソッドを既存のクラスに "パンチ"して、クラス内のすべての依存関係を利用できるようにする必要があります。ですから、なぜvv.variable_scopeに対してvvariable_scopeを変更したいのか分かりません。 tf.variable_scopeから必要なものを説明できますか?例: "my_transfer_function"はどのように実装されていますか? – user2133679

+0

'vs'は見えないので、スクリプトを実行しているときに'グローバル名と定義されていません 'と表示されます。そのため、 'vs'を' tf'に変更したのは、 'variable_scope'メソッドが' tf'にあるからです。しかし、 'linear'はそのファイル内のローカル関数であるため、スクリプトを実行すると' linear'が欠けていると文句を言います。したがって、私の質問は、この依存関係をどのように満たすでしょうか? – daniel451

答えて

2

このためにテンソルフロー実装のコードを変更する必要はありません。

BasicRNNCellには、activation functionというパラメータがあります。単にそれをtf.tanhからあなたが望むどのような起動機能に変更することもできます。

関連する問題