研究ノート(3.4)

昨日は図書館今日のNNでシンプルなトーチを使用し、その後、後方に複雑な神経回路網手書きで作られた、NNこれは私たちがデータや計算を節約するためにモデルを作成することが可能なニューラルネットワーク、です。nnは米国例えば、順序指定されたパラメータに応じて私たちのネットワークの構造と同じであり、我々は、隠された層への入力層は、線状構造(Y = WX + B)であり、隠された層の活性化関数はRELU、非表示であります出力層に層が線形である、我々は定義することができる
モデル= torch.nn.Sequential(
torch.nn.Linear(D_IN、H)、
torch.nn.ReLU()、
torch.nn.Linear(H、D_OUT )、

私も追加されたコードの一部についてどのノート、読みやすい
次のように完全なコードは次のとおりです。

#这次我用使用Pytorch中的nn库来创建神经网络,用Pytorch autograd来构建计算图和gradients然后Pytorch会帮我们自动计算gradients
#nn==neural network,在backward的基础上让网络变的更简单
import torch.nn as nn
import torch
N,D_in,H,D_out=64,1000,100,10
x=torch.randn(N,D_in)
y=torch.randn(N,D_out)
model=torch.nn.Sequential(##模型的组成顺序
#第一层是一个线性结构 这里和前面有点不一样了这里有偏置的
    #y=w1*x+b1
    torch.nn.Linear(D_in,H),
#第二层是一个ReLU激活函数
    torch.nn.ReLU(),
#第三层也是一个线性的结构和第一层一样的
    torch.nn.Linear(H,D_out),
)
#这是把w1,w2输入层-->隐藏层-->输出层的权重初始化为normal类型的
#关于normal,官网的解释是 :Returns a Tensor of random numbers drawn from separate normal distributions who’s mean and standard deviation are given.
#大概是返回一个张量,张量里面的随机数是从相互独立的正态分布中随机生成的,这样使得权重会好一点,训练效果也好,过一会我会做实验
torch.nn.init.normal_(model[0].weight)
torch.nn.init.normal_(model[2].weight)

#这里使用了nn里的MSELoss来处理loss损失数值,里面的参数reduction
#reduction = ‘none’,直接返回向量形式的 loss
#reduction = ‘sum’,返回loss之和
#reduction = ''elementwise_mean,返回loss的平均值
#reduction = ''mean,返回loss的平均值
loss_fn=nn.MSELoss(reduction='sum')
learning_rate= 1e-6# 1*10^6


for it in range(500): 
    y_pred=model(x)
    loss=loss_fn(y_pred,y)
    print("第",it,"轮","损失值:",loss.item())
    loss.backward()
    with torch.no_grad():
        #解释一下这里面的parameter是指的所有的参数,包括了这个模型里的所有参数,tensor和grad都有
        for param in model.parameters():
            #这里的parm是每一个参数,这里就是把每一个都参数都在当做grad在计算,我试过如果换成pram.grad LOSS值就不会改变了
            param-=learning_rate*param.grad
    
    model.zero_grad()#每次循环结束了要清零,不然会累加

    

私たちは、通常のコードを実行し、コメント文のランダムな重みを分散し、訓練ネットワークを守ってください。

ここに画像を挿入説明
ここに画像を挿入説明
私たちは、このモデルは、いくつかの効果を持っていますが、損失は依然として大きな価値である、私はビデオ見ていたことがわかりますが、B駅のビデオリンク
もともとランダムモデルの通常のランダムな正規分布の重みを追加していない、非常に経験豊富な教師の内部を非常に悪い、彼は正規分布する乱数初期の重量を置くので、効果は多くの優れている、私は練習中に遭遇したそうまでトラブルのこの種は、これらを試してみてください。

私たちは、この文を追加します。

ここに画像を挿入説明

ここに画像を挿入説明
効果は大きく、この方法は非常に有効であることは明らかである、改善されている、実際には、目的が近いせいにする目標値、W1最初の動きの方向に向かって移動するW BPネットワークの重みをさせることです、モデルは、それがない方法運びません。
loss_fn = nn.MSELoss(縮小=「合計はある 」) 関数は、
ここでNN処理しMSELoss損失値の損失、パラメータ削減使用
ベクトル形式直接リターンロスで、削減= 『なし』を
削減= 『SUM』 、リターンロスおよび
削減=「」平均のelementwise_mean、リターンロス
削減=「」平均、平均リターンロス
将来も使用することができる、今日他のものは、ニューラルネットワークを構築nnはビットの値を理解するために、そこにあります方法。

おすすめ

転載: www.cnblogs.com/Eldq/p/12423914.html