Weitere ähnliche Inhalte
Ähnlich wie NINと画像分類 (16)
Kürzlich hochgeladen (11)
NINと画像分類
- 11. 内訳・・・モデル
・ L.Convolution2D(3, 6, 7),
・ L.Convolution2D(6, 3, 5),
・ L.Convolution2D(3, 2, 3),
・ l1=F.Linear(1152,500),
・ l2=F.Linear(500,7),
< reluとmax_pooling_2d(ksize=3, stride=2)
< reluとaverage_pooling_2d(ksize=3, stride=2)
< reluとaverage_pooling_2d(ksize=3, stride=2)
< reluと F.dropout(ratio=0.3)
in, out, ksize
- 15. アルゴリズム見直し
・ 学習用画像は540枚 →10,017枚
・ (画像-平均画像) / 標準偏差 で正規化
・ 224*224(カラー)にランダム切り抜き →192,128,64,32,28px等・・・
・ 16枚ずつミニバッチ学習 →20, 8枚(20枚以上は厳しい)
・ epoch=50 →200等(上げると過学習する)
・ optimizerはAdam
・ WeightDecay=0.0005, GradientClipping=8.75 →Clippingを1〜10まで変化
- 17. モデル見直し
・ L.Convolution2D(3, 6, 7),
・ L.Convolution2D(6, 3, 5),
・ L.Convolution2D(3, 2, 3),
・ l1=F.Linear(1152,500),
・ l2=F.Linear(500,7),
こうではなく
て、
・ L.Convolution2D(3, 6, 7),
・ L.Convolution2D(6, 9, 5),
・ L.Convolution2D(9,12, 3),
・ l1=F.Linear(1152,500),
・ l2=F.Linear(500,7),
こう。(値は適当)
ksizeはその逆パターン?(未確
認)
in, out, ksize
- 21. (参考) 過学習 / 未学習
● 過学習に有効
○ 学習データを増やす
○ 変数を減らす
○ λ(正則化パラメータ)を大きくする
● 高バイアスに有効
○ 変数増やす
○ 多項式にする(モデルを複雑にする)
○ λ減らす
※2
※1 "Python Machine Learning" より引用 参考: http://chezou.hatenablog.com/entry/2016/05/29/215739
※2 http://lab.synergy-marketing.co.jp/blog/tech/machine-learning-stanford-3
※1
- 25. NIN(Network in Network)
・ Min Linら(2014)の提案したニューラルネットワークアーキテクチャ1
・ 従来のCNNの線形フィルタを多層パーセプトロン(MLP)に置き換える
・ CNNは層が進むほど広域をフィルタして高次の概念を生成するが、この提案は局
所的な画像が統合されて高次の概念になる前により良い抽象化をすることに意義が
ある。
1
https://arxiv.org/abs/1312.4400
- 28. chainer付属nin.pyのモデル定義
w = math.sqrt(2)
mlpconv1=L.MLPConvolution2D(3, (96, 96, 96), 11, stride=4, wscale=w),
mlpconv2=L.MLPConvolution2D(96, (256, 256, 256), 5, pad=2, wscale=w),
mlpconv3=L.MLPConvolution2D(256, (384, 384, 384), 3, pad=1, wscale=w),
mlpconv4=L.MLPConvolution2D(384, (1024, 1024, 1000), 3, pad=1,wscale=w),
- 29. chainer付属nin.pyのforward
h = F.max_pooling_2d(F.relu(self.conv1(x)), 3, stride=2)
h = F.max_pooling_2d(F.relu(self.conv2(h)), 3, stride=2)
h = F.max_pooling_2d(F.relu(self.conv3(h)), 3, stride=2)
h = self.conv4(F.dropout(h, train=self.train))
y = F.reshape(F.average_pooling_2d(h, 6), (x.data.shape[0], 1000))