スクラッチ学習pytorchレッスン1からネットワークを構築するスーパーシンプル

1つのタスク

最初に私たちは学習のタスクを完了するためにネットワークを構築していることを言った時:
私たちは、XOR演算は、一般的に知られ、ニューラルネットワークの排他的論理和演算を学びましょう「0、1異なるテイクを取るのと同じ。」そして、私たちがあること、単純に言う必要が、私たちは私たちの入力と出力の夜12時00(1,1)させ、そのようなニューラルネットワークを構築する必要があり、出力1入力(1,0)(0、同じテイクには、別のを取ります)、そして上のようにします。

アイデアの実現2

我々は2つの入力ノードを設定する必要があり、出力層は入力層の出力ノードに設けられているので、2つの入力と1つの出力を持つ必要がある必要があるため。問題は比較的簡単です、我々はわずか10節の隠れた層を設定する必要があるので、良い結果を得ることができ、我々はReLU機能を使用隠された層の活性化関数なので、我々はそうでは0-1での出力が残っていること、出力層シグモイド関数を使用しますレンジ、出力は出力が0であるように、1に、0.5以上の出力を可能にするために、0.5よりも大きい場合。

3実装プロセス

迅速に我々が使用する簡単な方法を構築します。

3.1は、必要なライブラリを導入します

import torch
import torch.nn as nn
import numpy as np

もちろん、nnはnnはコードを書くとトーチ袋を容易にするために、pytorchトーチパッケージによって導入されるが交換され、このパッケージは、ニューラルネットワークパケットを取るように設計され、ニューラルネットワークNN略語です。numpyのは、入力として行列を作成するために導入されました。

3.2トレーニングセットを作成します

# 构建输入集
x = np.mat('0 0;'
           '0 1;'
           '1 0;'
           '1 1')
x = torch.tensor(x).float()
y = np.mat('1;'
           '0;'
           '0;'
           '1')
y = torch.tensor(y).float()

私は個人的にこのようnp.mat、私は言葉遣いはもちろん、あなたはまた、他の方法を使用することができ、比較的簡単であると感じて行列を構築することを好みます。しかし、マトリックスは、このステップtorch.tensor(x)の.FLOATを()構築が完了している必要があります、あなたはテンソル作成した変数に入力を配置する必要があります。

それテンソルは何ですか?あなたは、単にあなたがこのフレームワークを使用したいpytorchは、最初のテンソル変数にあなたの変数を変換する必要があり、彼はpytorchで使用される変数の一種であることを理解することができます。そして、私たちは、あなたが作成np.mat使用した入力がint型であり、テンソルに変換される一方、このニューラルネットワークの入力と出力は、テンソル変数フロートを参照すると、フロート浮動小数点でなければならないかを尋ねますitensorは自動的にそう.FLOAT後で追加する、int型に変換()floatに変換されます。

したがって、我々は、(xおよびy行列である行列)、xは、各行が彼の入力4行2列の行列である我々は、すべての入力ケースを置く二つの入力値を、完全な入力と出力を構築しました彼らは出て記載されています。Yは、4行のマトリクスの出力であり、各行は出力、マトリクスXに対応する各ラインの入力です。

3.3ネットワークを構築します

myNet = nn.Sequential( 
    nn.Linear(2,10),
    nn.ReLU(),
    nn.Linear(10,1),
    nn.Sigmoid()
    )
print(myNet)

出力:
ここに画像を挿入説明

私たちは、NNパッケージがネットワークを構築し、順次使用し、この機能を使用すると、私たちは、ニューラルネットワークを積み木のようなものを見てみましょうことができるということです。

nn.Linear(2,10)は、入力ノードの数を表す入力層構造を意味し、数10は、出力ノードを表します。リニアは、他の活性化機能が含まれていない、あなたは彼があなたに漢の出力を与えるものを入力して、この層の意味で、英語、で線形です。nn.ReLU()これは、機能層の活性化を表し、あなただけの関数にReLUを投げ入力します。その後、再びリニアは、最終的にはシグモイド関数に投げ。2,10,1、単純な3つの層の数を表現します。

セットオプティマイザ3.4

optimzer = torch.optim.SGD(myNet.parameters(),lr=0.05)
loss_func = nn.MSELoss()

理解は、我々は、最適化の方法を設定し、このステップを採用するように、このステップは、あなたが、あなたのネットワークを訓練するために最適化された方法を持っている必要があるということです。

torch.optim.SGD手段は、SGDのトレーニング方法の使用は、あなたはそれを必要とすることを、あなたは、それぞれ、myNet.parametsとLRを渡すことができるようになりますネットワークのパラメータを学習します。loss_funcフレーズは、私たちの問題は、比較的単純であるため、コスト関数を設定し、平均二乗誤差コスト関数であるMSEの使用、そう。

3.5トレーニングネットワーク

for epoch in range(5000):
    out = myNet(x)
    loss = loss_func(out,y)
    optimzer.zero_grad()
    loss.backward()
    optimzer.step()

私は、(何回ので必要ないかもしれません)5000の循環を設定するためにここになるようにトレーニング動作の繰り返し5000です。各出力を直接MYNET(x)は、ネットワークに侵入するためには、外の出力に投げ込まれます(単純な、そして粗そう!)、そして、コスト関数とあなたの標準出力yがシークエラー。グラデーションの最後を除去するためのステップを毎回再反復を得、あなたがライン上でこのステップを覚えているだろうことは明らか勾配は、初心者にも理解していません。当然のloss.backward()は逆伝播を作ることです、そして、()optimzer.step私達はちょうど仕事に設定オプティマイザをさせることです。

3.6テスト

print(myNet(x).data)

結果:

ここに画像を挿入説明

あなたは非常に近い我々が期待する結果に結果を見ることができ、もちろん、あなたはまた、テスト・データを変更することができ、結果は同様であろう。私達のテンソル変数は、実際には2つの部分、部分で、テンソルデータで構成されているので、私たちここに.dataのと、コードの末尾に、他のテンソルパラメータの自動派生である理由の簡単な説明は、我々は.dataセクションを意味追加しますテンソルデータ出力がで取られ、そうでない場合には、出力は次のようになります。

ここに画像を挿入説明

デシジョンツリーモデルのようになるまでにもブロガー初心者、しかし、徹底的に深い学習の枠組みPyTorchのインスピレーション今日の1を理解し始めました。このような大物は、少なくとも力にロード理解したときに聞こえます。

公開された47元の記事 ウォンの賞賛4 ビュー2257

おすすめ

転載: blog.csdn.net/qq_34107425/article/details/104097183