4

例がそれをより明確にすることを願っています (これは Logistic Regression オブジェクトであり、Theano Tensor ライブラリは T としてインポートされます)

    def __init__(self, input, n_in, n_out):
        #Other code...
        self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b)

メインでダウンと呼ばれるものは...

def main():
    x = T.matrix()
    classifier = LogisticRegression(input=x, n_in=28 * 28, n_out=10)

これらのスニペットだけでは理解できない場合、コードはこのページの「Putting it All Together」の下にあります - http://deeplearning.net/tutorial/logreg.html#logreg

4

3 に答える 3

4

そう... Theano は、計算する式のグラフを評価する前に作成します。この例の 'x' などの theano 変数をロジスティック回帰オブジェクトの初期化に渡すことにより、x に依存する theano 式である p_y_given_x などの多くの式をオブジェクトに作成します。これは、後でシンボリック勾配計算に使用されます。

より良い感触を得るには、次のことができます。

import theano.pp #pp is for pretty print
x = T.dmatrix('x') #naming your variables is a good idea, and important i think
lr = LogisticRegression(x,n_in = 28*28, n_out= 10)
print pp(lr.p_y_given_x)

これにより、次のような出力が得られるはずです

softmax( W \dot x + b)

そして、あなたがそれに取り組んでいる間、先に進んで試してみてください

print pp(T.grad(lr._y_given_x,x)) #might need syntax checkng

これが、theano が式を内部的に格納する方法です。次に、これらの式を使用して、theano で次のような関数を作成できます。

values = theano.shared( value = mydata, name = 'values')
f = theano.function([],lr.p_y_given_x , 
                    givens ={x:values},on_unused_input='ignore')
print f()

次に f を呼び出すと、mydata で定義された値の予測クラス確率が得られます。theano でこれを行う方法 (および DL チュートリアルで行われている方法) は、「ダミー」の theano 変数を渡し、「givens」キーワードを使用してデータを含む共有変数に設定することです。共有変数に変数を格納すると、theano が行列演算に GPU を使用できるようになるため、これは重要です。

于 2013-06-28T06:29:44.473 に答える
1

これは、名前付きパラメーターと呼ばれる Python の機能です。オプションのパラメーターまたは多くのパラメーターを持つ関数の場合、パラメーターが関数に渡された順序に依存するのではなく、名前でパラメーターを渡すと便利です。あなたの特定のケースでは、inputパラメータの意味をここで見ることができます。

于 2013-06-26T14:39:56.270 に答える
0

input名前付きパラメーター、または、n_in、などの既定のキーワード引数は、n_outいくつかの理由で役立ちます。

  • 関数/メソッドに多くのパラメーターがある場合、パラメーターの機能順序を覚える必要がなく、名前で渡す方が簡単になります。
  • 多くの関数/メソッドには、頻繁に使用されるデフォルトのユース ケースと、めったに使用されない特殊なユース ケースがあります。特別なユースケースで追加の引数を関数に渡す必要がある場合、それらはデフォルト値を持つ名前付きパラメーターの形式をとる可能性が高くなります。このように、関数がデフォルトのユースケースで使用される場合、ユーザーは追加のパラメーターを指定する必要はありません。誰かが特別なケースを使用したい場合にのみ、特別な何かを指定する必要があります。これにより、複雑な方法や特殊な方法で使用されない場合、関数とメソッドの呼び出しが読みやすくシンプルになります。
于 2013-06-26T15:09:31.163 に答える