Educoed -- 順伝播、逆伝播、ニューラル ネットワーク モデルのトレーニングを実現します

レベル 1: ニューラル ネットワーク モデルの順伝播を実装する

numpyをインポートする

レイヤーから Convolution、Relu、FullyConnected、MaxPool、SoftmaxWithLoss をインポート


 

クラスTinyNet:

    def __init__(self, W_conv1, b_conv1, W_conv2, b_conv2, W_fc, b_fc):

        ########## 始める ##########

        self.conv1 = 畳み込み(W_conv1, b_conv1, ストライド=1, パッド=1)  

        self.relu1 = Relu()  

        self.pool1 = MaxPool(2, 2, ストライド=2, パッド=0)  

        self.conv2 = 畳み込み(W_conv2, b_conv2, ストライド=1, パッド=1)  

        self.relu2 = Relu()  

        self.pool2 = MaxPool(2, 2, ストライド=2, パッド=0)  

        self.fc = 完全接続(W_fc, b_fc)  

        self.loss = SoftmaxWithLoss()

        ########## 終わり ##########

    def forward(self, x, t):

        ########## 始める ##########

        x = self.conv1.forward(x)  

        x = self.relu1.forward(x)  

        x = self.pool1.forward(x)  

        x = self.conv2.forward(x)  

        x = self.relu2.forward(x)  

        x = self.pool2.forward(x)  

        x = self.fc.forward(x)  

        損失 = self.loss.forward(x, t)  

        返品×、損失 

        ########## 終わり ##########

レベル 2: ニューラル ネットワーク モデルのバックプロパゲーションを実装する

numpyをインポートする

レイヤーから Convolution、Relu、FullyConnected、MaxPool、SoftmaxWithLoss をインポート


 

クラスTinyNet:

    def __init__(self, W_conv1, b_conv1, W_conv2, b_conv2, W_fc, b_fc):

        self.conv1 = 畳み込み(W_conv1, b_conv1, ストライド=1, パッド=1)

        self.relu1 = Relu()

        self.pool1 = MaxPool(2, 2, ストライド=2, パッド=0)

        self.conv2 = 畳み込み(W_conv2、b_conv2、ストライド=1、パッド=1)

        self.relu2 = Relu()

        self.pool2 = MaxPool(2, 2, ストライド=2, パッド=0)

        self.fc = 完全接続(W_fc, b_fc)

        self.loss = SoftmaxWithLoss()


 

    def forward(self, x, t):

        x = self.conv1.forward(x)

        x = self.relu1.forward(x)

        x = self.pool1.forward(x)

        x = self.conv2.forward(x)

        x = self.relu2.forward(x)

        x = self.pool2.forward(x)

        x = self.fc.forward(x)

        損失 = self.loss.forward(x, t)

        返品×、損失

    def 後方(自分自身):

        ########## 始める ##########

        dx = self.loss.backward()  

        dx = self.fc.backward(dx)  

        dx = self.pool2.backward(dx)  

        dx = self.relu2.backward(dx)  

        dx = self.conv2.backward(dx)  

        dx = self.pool1.backward(dx)  

        dx = self.relu1.backward(dx)  

        dx = self.conv1.backward(dx)

        ########## 終わり ##########

        self.conv1.dW、self.conv1.db、self.conv2.dW、self.conv2.db、self.fc.dW、self.fc.db を返します。

レベル 3: ニューラル ネットワークの勾配降下トレーニングの実装

numpyをインポートする

レイヤーから Convolution、Relu、FullyConnected、MaxPool、SoftmaxWithLoss をインポート


 

クラスTinyNet:

    def __init__(self, W_conv1, b_conv1, W_conv2, b_conv2, W_fc, b_fc):

        self.conv1 = 畳み込み(W_conv1, b_conv1, ストライド=1, パッド=1)

        self.relu1 = Relu()

        self.pool1 = MaxPool(2, 2, ストライド=2, パッド=0)

        self.conv2 = 畳み込み(W_conv2、b_conv2、ストライド=1、パッド=1)

        self.relu2 = Relu()

        self.pool2 = MaxPool(2, 2, ストライド=2, パッド=0)

        self.fc = 完全接続(W_fc, b_fc)

        self.loss = SoftmaxWithLoss()

    def forward(self, x, t):

        x = self.conv1.forward(x)

        x = self.relu1.forward(x)

        x = self.pool1.forward(x)

        x = self.conv2.forward(x)

        x = self.relu2.forward(x)

        x = self.pool2.forward(x)

        x = self.fc.forward(x)

        損失 = self.loss.forward(x, t)

        返品×、損失

    def 後方(自分自身):

        dx = self.loss.backward()

        dx = self.fc.backward(dx)

        dx = self.pool2.backward(dx)

        dx = self.relu2.backward(dx)

        dx = self.conv2.backward(dx)

        dx = self.pool1.backward(dx)

        dx = self.relu1.backward(dx)

        dx = self.conv1.backward(dx)

        self.conv1.dW、self.conv1.db、self.conv2.dW、self.conv2.db、self.fc.dW、self.fc.db を返します。


 

def train_one_iter(W_conv1, b_conv1, W_conv2, b_conv2, W_fc, b_fc, x, t, learning_rate):

    ネットワーク = TinyNet(W_conv1, b_conv1, W_conv2, b_conv2, W_fc, b_fc)

    出力、損失 = network.forward(x, t)

    dW_conv1、db_conv1、dW_conv2、db_conv2、dW_fc、db_fc = network.backward()

    ########## 始める ##########

    new_W_conv1 = W_conv1 - dW_conv1 * learning_rate  

    new_b_conv1 = b_conv1 - db_conv1 * learning_rate  

    new_W_conv2 = W_conv2 - dW_conv2 * learning_rate  

    new_b_conv2 = b_conv2 - db_conv2 * learning_rate  

    new_W_fc = W_fc - dW_fc * 学習率  

    new_b_fc = b_fc - db_fc * 学習率 

    ########## 終わり ##########

    new_W_conv1、new_b_conv1、new_W_conv2、new_b_conv2、new_W_fc、new_b_fc を返す

おすすめ

転載: blog.csdn.net/qq_57409899/article/details/124992904