おひとりさま現役パラレルワーカーフクコろぐ

これからの会社員は、複数の収入源をもとう! 会社に翻弄されずアナタらしく仕事ができる。 そんなパラレルワーカーを広めるフクコのブログです。

【文系プログラミング初心者deE資格】ゼロつくディープラーニング #23

f:id:fukuko-parallel-work:20211122204718j:plain

こんにちは!

現役パラレルワーカー フクコです。

f:id:fukuko-parallel-work:20210212204833p:plain




前回の記事↓に続き

www.fukuko-parallel-work.com




来年の2月の試験に向けてE資格試験勉強中のため


E資格とは?の記事はコチラ↓

www.fukuko-parallel-work.com




ゼロつくシリーズでおなじみ

オーライリーから出版されている

ディープラーニングの本格的な入門書でよくおススメされる

「ゼロからつくる Deep Learning」本


f:id:fukuko-parallel-work:20211029220008j:plain





この本↑を毎日5ページずつコツコツこなす

約2か月間で今年中に終了するので

来年のE資格試験までにこれで基礎力をつけることにしました。(^^)


ついつい私は何もないとだらけてしまうので(笑)

毎日5ページ終わった後の記録とまとめを書いていこうと思います。


と、まとめに入る前に…

やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)


「 ”できないどうしよう”って考えるより

 ”できる!どうやろう” って考える方が絶対いいよ 大丈夫!」

by エマ


私の大好きな約束のネバーランド」(約ネバ)から

エマの名言です。


そう! 自己啓発でもよく出てくることですが 


ポジティブな発言はポジティブな事象を呼び寄せます!


「私にはできない、ムリだ」と言っていればそのとおりになります

逆に

「私ならできる、大丈夫」と言っていればそのとおりにもなります。(^^)


できるかどうかの境界線
って

結局のところ、自分の気持ち次第!なんですよね!


エマ、どうもありがとう! (^0^)

今日もやる気が出てきました! 

よし!! 今日も頑張るぞ~! お~!! 

というコトで、今日も私ならできる!コツコツ努力でノルマをこなしますよ! 笑


ではでは、いい加減まとめに入ります。笑




その前に本の目次の紹介です。

ゼロつくディープラーニングは、下記↓の合計8章で構成されています。

本の目次

  • 5章 誤差伝播法
  • 6章 学習に関するテクニック



ちなみに…

ゼロつくディープラーニング第1章はPython入門のセクション(20ページ分)なので、

とりあえず今回私は飛ばし、第2章からまとめています。

今回も引き続き、第5章のつづきからでーす。



第5章 誤差逆伝播法のつづき

ココでは、

重みパラメータの勾配の計算を効率よく行える誤差逆伝播法」について学ぶ

5.6.2 バッチ版Affineレイヤ つづき


Affineの実装は次のよう↓になる。

#5.6.2 バッチ版Affineレイヤ

# numpyをインポート
import numpy as np

class Affine:
    def __init__(self, W, b):
        self.W = W
        self.b = b
        self.x = None
        self.dW = None
        self.db = None 
    
    def forward(self, x):
        self.x = x
        out = np.dot(x, self.W)+ self.b
        
        return out
    
    def backward(self, dout):
        dx = np.dot(dout, self.W.T)
        self.dW = np.dot(self.x.T, dout)
        self.db = np.sum(dout, axis = 0)
        
        return dx
5.6.3 Softmax-with-Loss レイヤ


出力層であるソフトマックス関数について説明する。


ソフトマックス関数は、

入力値を正規化して出力する


ニューラルネットワーク推論で答えを一つだけ出す場合、Softmaxレイヤは必要ない


一方で


ニューラルネットワーク学習の場合、Softmaxレイヤが必要


「ソフトマックス関数」の損失関数として「交差エントロピー誤差」を用いる

逆伝播が(y₁ - t₁, y₂ - t₂, y₃ - t₃) という”キレイ”な結果になる。


「恒等関数」も同じく、損失関数として「2乗和誤差」を用いる

逆伝播が(y₁ - t₁, y₂ - t₂, y₃ - t₃) という”キレイ”な結果になる。



Softmax-with-Loss レイヤの実装は下記の↓とおり。

# 5.6.3 Softmax-with-Loss レイヤの実装

class SoftmaxWithLoss:
    def __init__(self):
        self.loss = None #損失
        self.y = None #softmaxの出力
        self.y = None #教師データ(one-hot vector)
        
    def forward(self, x, t):
        self.t = t
        self.y = softmax(x)
        self.loss = cross_entropy_error(self.y, self.t)
        
        return self.loss

    def backward(self, dout=1):
        batch_size = self.t.shape[0]
        dx = (self.y - self.t)/batch_size
	#逆伝播の際、伝播する値をバッチ個数で割ることで、データ1個当たりの誤差が前レイヤに伝播する。
        
        return dx

今日のまとめ


ハイ、今日はここまで!!

第5章の誤差逆伝播法はまだまだつづきます!

引き続き頑張りまっす。


最後まで読んでくださり、ありがとうございます!

フクコ


ディープラーニング入門書おススメ本