私はmnielsenのオンラインbookに従っています。私は彼のコードhereにhereと定義された運動量の更新を実装しようとしています。全体的な考え方は、運動量の更新の場合、負の勾配の重みベクトルを直接変更しないということです。パラメータはvelocity
で、最初にゼロに設定してから、ハイパーパラメータのmu
を通常0.9
に設定します。ニューラルネットワークの運動量の更新を実装する
# Momentum update
v = mu * v - learning_rate * dx # integrate velocity
x += v # integrate position
は、だから私は、重みwを持っているし、次のコードスニペットにnebla_w
として重量の変更:更新最後の2行でとても
def update_mini_batch(self, mini_batch, eta):
"""Update the network's weights and biases by applying
gradient descent using backpropagation to a single mini batch.
The ``mini_batch`` is a list of tuples ``(x, y)``, and ``eta``
is the learning rate."""
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
for x, y in mini_batch:
delta_nabla_b, delta_nabla_w = self.backprop(x, y)
nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]
self.weights = [w-(eta/len(mini_batch))*nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b-(eta/len(mini_batch))*nb
for b, nb in zip(self.biases, nabla_b)]
self.weight
勢いのため
self.weights = [w-(eta/len(mini_batch))*nw
for w, nw in zip(self.weights, nabla_w)]
として私は次のようにしています:
更新のため
TypeError: can't multiply sequence by non-int of type 'float'
:
しかし、私は次のエラーを取得しています。私のeta
は、float関数で再びラップしていますが、すでにハイパーパラメータはfloatです。私もlen(mini_batch)
をフロートで包みました。私もnw.astype(float)
してみましたが、私はまだエラーが発生します。なぜ私は分からない。 nabla_w
は、浮動小数点数の配列がnumpyです。
'TypeError:両方の配列がnumpyの場合、 'float'型の非int型配列を掛けることはできません。何かは、リスト、タプルまたは他のシーケンスであり、numpyの配列ではありません。乗算される変数ごとに 'type(variable)'を表示すると、何かがnumpyの配列ではないことがわかります。あなたは 'momentum_mu'と' momentum_v'の定義を表示していませんでした。おそらく彼らは犯罪者ですか?例えば、同じエラーから私の答えを今日見て[ここ](https://stackoverflow.com/questions/47520890/error-cant-multiply-sequence-by-non-int-of-type-float/47521032#47521032)参照してくださいメッセージ。 –
また、 'float'を使用しているべきであることを伝えるエラーはありません。あなたが' float'を使用していることを伝えているので、 'float'として束縛することはできませんこの問題を解決するのに役立ちます。タプルやリストに浮動小数点数を掛けているところ。 –
@AlexanderReynolds私はそれを今見ます!私はmomentum_vを間違った方法で初期化していました。どうもありがとうございます。あなたは答えのセクションに書くことができます、そして、私はあなたの答えを受け入れることができます。 –