pytorch深学習の枠組みでは、人工ニューラルネットワーク全体の手順の確立に4つのステップを次のとおりです。
図1に示すように、生データをロードします
図2に示すように、ニューラルネットワークは、特に構築しました
3、トレーニングデータ
4、テストおよび検証データ
データは、例えば、元のデータのフォントを書いMINISTするニューラルネットワークの負荷をpytorch:
輸入トーチ
PLTとしてインポートmatplotlib.pyplot
デフplot_curve(データ):
図= plt.figure()
plt.plot(範囲(LEN(データ))、データ、色= "青")
plt.legend([ "値"]、LOC = "右上")
plt.xlabel( "ステップ")
plt.ylabel( "値")
plt.show()
デフplot_image(IMG、ラベル、名前):
図= plt.figure()
私のための範囲内(6):
plt.subplot(2,3、I + 1)
plt.tight_layout()
plt.imshow(IMG [I] [0] * 0.3081 + 0.1307、CMAP = "グレー"、補間= "なし")
plt.title( "{}:{}" 形式(名前、ラベル[I] .item()))
plt.xticks([])
plt.yticks([])
plt.show()
DEF one_hot(ラベル、深さ= 10)。
アウト= torch.zeros(label.size(0)、深さ)
IDX = torch.LongTensor(ラベル).view(-1,1)
out.scatter_(= 1、調光率= IDX、値= 1)
アウト返します
BATCH_SIZE = 512
輸入トーチ
トーチインポートNN#からニューラルネットワークパッケージの構築を完了するために
一般的に使用される関数を含むF#1パケットのような機能インポートtorch.nnから
トーチインポートOPTIM#の最適化キットから
輸入torchvisionの#のビジュアルツールキット
PLTとしてインポートmatplotlib.pyplot
輸入plot_curve utilsのから、plot_image、one_hot
#ステップ1負荷データセットロードデータパケット
train_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST( "minist_data"、電車= Trueの場合、ダウンロード=真、(= torchvision.transforms.Compose変換
[torchvision.transforms.ToTensor()、torchvision.transforms.Normalize((0.1307)(0.3081))
]))、
BATCH_SIZE = BATCH_SIZE、シャッフル=真)
test_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST( "minist_data"、電車= Trueの場合、ダウンロード= Falseに、(= torchvision.transforms.Compose変換
[torchvision.transforms.ToTensor()、torchvision.transforms.Normalize((0.1307)(0.3081))
]))、
BATCH_SIZE = BATCH_SIZE、シャッフル=偽)
X、Y =次(ITER(train_loader))
印刷(x.shape、y.shape)
plot_image(X、Y、 "画像")
プリント(X)
プリント(Y)
一例として、回帰問題単純なニューラルネットワークを構築するために、特定の実装コードは次のように
輸入トーチ
この中にF#の活性化関数としてtorch.nn.functionalインポート
X = torch.unsqueeze(torch.linspace(-1、1、100)、DIM = 1)#Xのデータ(テンソル)、形状=(100、1)
Y = x.pow(2)+ 0.2 * torch.rand(x.size())#騒々しいYデータ(テンソル)、形状=(100、1)
クラスネット(torch.nn.Module):#は、モジュールトーチ(固定)を継承
デフ__init __(自己、n_feature、n_hidden、n_output)の#define情報層、どのように多くの入力n_feature、n_hidden各ニューロン、出力n_outputの数
スーパー(ネット、自己).__のinit __()#は__init__機能を継承した(固定)
#は、各層を形成するかを定義します
self.hidden = torch.nn.Linear(n_feature、n_hidden)#中間層、線形出力を定義します
self.predict = torch.nn.Linear(n_hidden、n_output)#は、出力層の線形出力を定義します
DEFフォワード(自己、X):#データが__init__におけるレイヤ情報、入力情報は、また、前方モジュール機能で、配信プロセスに以前に定義されたニューラルネットワークであるの組み合わせをX
入力値の#順伝播、ニューラルネットワーク解析の出力値
X = F.relu(self.hidden(X))#(隠れ層リニア値)活性化関数を定義します
X = self.predict(X)#出力層、出力値
X返します
ネット=ネット(n_feature = 1、n_hidden = 10、n_output = 1)
プリント(ネット)#ネット構造
「」」
ネット(
(隠された):リニア(1 - > 10)
(予測):リニア(10 - > 1)
)
「」」
#オプティマイザは、トレーニングツールです。
オプティマイザ= torch.optim.SGD(net.parameters()、LR = 0.2)#全てのパラメータは、着信ネットの学習率
loss_func = torch.nn.MSELoss()#予測値と計算された誤差の真値(平均二乗誤差)
範囲のためのT(100):100のステップまでのステップのトレーニング数の#
予測=ネット(X)#は、各反復ステップ、出力の予測値のために、ネットの訓練データxを与え
損失= loss_func(予測、y)を算出間#エラー
#最適化の手順:
更新されたパラメータ値ステップにoptimizer.zero_grad()#明確な残基
loss.backward()#誤差逆伝播、更新値演算パラメータ
optimizer.step()#パラメータ更新値がネットパラメータに適用されます
PLTとしてインポートmatplotlib.pyplot
plt.ion()#リアルタイムプロットについて何かを描きます
範囲のためのT(200)。
予測=ネット(X)#入力XおよびXに基づいて予測します
損失= loss_func(予測、Y)位(1 NN出力、2ターゲット)でなければなりません
次の電車用optimizer.zero_grad()#明確な勾配
loss.backward()#バックプロパゲーション、計算勾配
optimizer.step()#は、グラデーションを適用します
T%5 == 0の場合:#は、一度、図のすべての5つのステップを描きました。
#プロットとshow学習プロセス
plt.cla()
plt.scatter(x.data.numpy()、y.data.numpy())
plt.plot(x.data.numpy()、prediction.data.numpy()、 'R-'、LW = 5)
plt.text(0.5、0、 '損失=%4F' %loss.data.numpy()、fontdict = { 'サイズ':20、 '色': '赤'})
plt.pause(0.1)
plt.ioff()
plt.show()