質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1241閲覧

オライリー・ジャパンの「ゼロから作る Deep Learning」という本についての質問です。

HideyukiEda

総合スコア11

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/11 13:10

編集2019/06/11 13:23

オライリー・ジャパンの「ゼロから作る Deep Learning」という本についての質問です。

疑問は、p.114の以下のコードについてです。

import sys, os sys.path.append(os.pardir) from common.functions import * from common.gradient import numerical_gradient class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std = 0.01): """ input_size・・入力層の数 hidden_size・・中間層の数 output_size・・出力層の数 weight_init_std """ #重みの初期化 self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b1'] = np.zeros(hidden_size) self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size) self.params['b2'] = np.zeros(output_size) def predict(self, x): """ 入力値をもとに予測をする """ W1, W2 = self.params['W1'], self.params['W2'] b1, b2 = self.params['b1'], self.params['b2'] a1 = np.dot(x, W1) + b1 z1 = sigmoid(a1) a2 = np.dot(z1, W2) + b2 y = softmax(a2) return y def loss(self, x, t): """ 損失関数・・どれぐらい教師データと値が違うかを求める 返り値が大きいほど合っていない x・・入力データ t・・教師データ """ y = self.predict(x) return cross_entropy_error(y, t) def accuracy(self, x, t): """ 返り値・・0から1の値 大きいほど入力データからの予測値と、教師データの値が一致している """ y = self.predict(x) y = np.argmax(y, axis=1) t = np.argmax(t, axis=1) accuracy = np.sum(y == t) / float(x.shape[0]) return accuracy def numerical_gradient(self, x, t): """ 重みパラメータに対する勾配を求める x・・入力データ t・・教師データ grads・・勾配を保持するディクショナリ変数 """ loss_W = lambda W: self.loss(x, t) #loss_Wはloss関数と等しい grads = {} grads['W1'] = numerical_gradient(loss_W, self.params['W1']) grads['b1'] = numerical_gradient(loss_W, self.params['b1']) grads['W2'] = numerical_gradient(loss_W, self.params['W2']) grads['b2'] = numerical_gradient(loss_W, self.params['b2']) return grads

上記のnumerical_gradientの部分で
loss_W = lambda W: self.loss(x, t)
について、引数としてWを設定している意味が理解できておりません。Wはself.loss(x,t)の中のどの部分に使われているのでしょうか。

初心者的質問で恐縮ですが、どうぞ宜しくお願いします。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Q71

2019/06/11 13:21

プログラムコードは ``` と ``` の行で囲ってください。Python は、インデントに意味を用います。インデントを崩さないでください。
quickquip

2019/06/11 13:42

p111からp112にかけて書いてあると思いますが
HideyukiEda

2019/06/11 13:59

Wを引数にすると、loss関数を計算する際のself.Wが更新されて、Wに対する微分が計算されているという理解で良いのでしょうか?
Q71

2019/06/13 13:45

下の方のnumerical_gradient は、from import で持ってくるところが呼ばれるようです。そちらの関数で第1引数がどの様に使われているか、の様に思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問