TensorFlowオプティマイザ(Python)では、メソッドapply_dense
がニューロンの重み(レイヤ接続)とバイアスウェイトに対して呼び出されますが、このメソッドでは両方を使用したいと思います。オプティマイザでバイアスとニューロンのウェイトを取得する方法は?
def _apply_dense(self, grad, weight):
...
例:完全に接続されたニューラルネットワークで、2つのニューロンと2つのニューロンを持つ隠れ層と、それぞれにバイアスがあります。
我々はレイヤ2で見てみるならば、我々はapply_dense
にニューロンの重みのためのコールを取得する:
とバイアスの重みのためのコール:
しかし、私は両方の行列を1回の呼び出しで必要とするかこのようなapply_dense
または重み行列の:
X_2X_4、B_1X_4、... 2つのニューロン間の接続の重みのためだけの表記です。したがって、B_1X_4はB_1とX_4の間の重量のプレースホルダーではありません。
どのようにするには?ここでは、最小限の作業たとえば
MWE
勢いで確率的勾配降下オプティマイザの実装。各層ごとに、他のニューロンからのすべての着信接続の運動量が平均値に減少します(ndims == 2を参照)。私が必要とするのは、入力ニューロン接続からの拍動値だけでなく、(上記のような)入力バイアス接続からの拍動値の平均でもあります。シンプルな神経回路網については
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
from tensorflow.python.training import optimizer
class SGDmomentum(optimizer.Optimizer):
def __init__(self, learning_rate=0.001, mu=0.9, use_locking=False, name="SGDmomentum"):
super(SGDmomentum, self).__init__(use_locking, name)
self._lr = learning_rate
self._mu = mu
self._lr_t = None
self._mu_t = None
def _create_slots(self, var_list):
for v in var_list:
self._zeros_slot(v, "a", self._name)
def _apply_dense(self, grad, weight):
learning_rate_t = tf.cast(self._lr_t, weight.dtype.base_dtype)
mu_t = tf.cast(self._mu_t, weight.dtype.base_dtype)
momentum = self.get_slot(weight, "a")
if momentum.get_shape().ndims == 2: # neuron weights
momentum_mean = tf.reduce_mean(momentum, axis=1, keep_dims=True)
elif momentum.get_shape().ndims == 1: # bias weights
momentum_mean = momentum
else:
momentum_mean = momentum
momentum_update = grad + (mu_t * momentum_mean)
momentum_t = tf.assign(momentum, momentum_update, use_locking=self._use_locking)
weight_update = learning_rate_t * momentum_t
weight_t = tf.assign_sub(weight, weight_update, use_locking=self._use_locking)
return tf.group(*[weight_t, momentum_t])
def _prepare(self):
self._lr_t = tf.convert_to_tensor(self._lr, name="learning_rate")
self._mu_t = tf.convert_to_tensor(self._mu, name="momentum_term")
もっと明示する必要があります。どのような方法で呼んでいますか?最小の実例を教えていただけますか? –
私はオプティマイザを実装しています。私はそのようなオプティマイザのMWEと、私の質問の観点からの要件の記述を追加しました。 – Spen
私はあなたが何を求めているのか分かりません。あなたのネットワークでどのように体重を取得するか尋ねていますか? –