pytorch回帰問題を解決するために、ニューラルネットワーク(非常に理解しやすいです)

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()

 

おすすめ

転載: www.cnblogs.com/Yanjy-OnlyOne/p/11530905.html