oreilly-japan / deep-learning-from-scratch-3

『ゼロから作る Deep Learning ❸』(O'Reilly Japan, 2020)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

VGG16をResNetにしたらエラー(ステップ58)

todokitchen32 opened this issue · comments

とても良い書籍であり、たいへん勉強になっており感謝しています。

さて、本文では触れられていませんが、ステップ58においてVGG16の代りにResNetを
試したところ、以下のようなエラーが出て動作しませんでした。
dezero.modelsのResNetクラスに何か問題があるかもしれません。

以下、内容:

まず、書籍のp.472~473のコードは正常に動作しました。
runfile('C:/Users//DeZero_steps_after58/DeZero_step58.py', wdir='C:/Users//DeZero_steps_after58')
zebra

dezero.modelsの中のResNetクラスを見て、VGG16と同様な入力を与えればそのまま
動作するのではないかと考えて、上記のコードにおいて、モデルをResNetに変更
してみました。画像の前処理は共通と考えて、VGG16.preprocess(img)のままとしました。

import numpy as np
from PIL import Image
import dezero
from dezero.models import VGG16, ResNet50

url ='https://github.com/oreilly-japan/deep-learning-from-scratch-3/' 'raw/images/zebra.jpg'
img_path = dezero.utils.get_file(url)
img = Image.open(img_path)

x = VGG16.preprocess(img)
x = x[np.newaxis]

#model = VGG16(pretrained=True)
model = ResNet(pretrained=True)
with dezero.test_mode():
y = model(x)
predict_id = np.argmax(y.data)

model.plot(x, to_file='vgg.pdf')
labels = dezero.datasets.ImageNet.labels()
print(labels[predict_id])

つぎのエラーが出ました。
File "C:\Users*****\anaconda3\lib\site-packages\dezero\models.py", line 235, in init
nobias=True)
TypeError: init() got multiple values for argument 'nobias'

BottleneckAとBottleneckB中のConv2dの引数に問題があるようなので、入力サイズに相当する
引数には in_channels というキーワードを使うように変更してみました。次はその例です。
self.conv1 = L.Conv2d(mid_channels, 1, stride_1x1, 0,
nobias=True, in_channels=in_channels)

このことによって、エラーは出ずに動作するようになりました。しかし、zebraという正しい答え
にはならず、つぎのように、black grouse になりました。
runfile('C:/Users//DeZero_steps_after58/DeZero_step58.py', wdir='C:/Users//DeZero_steps_after58')
black grouse

ちなみに、ResNet50にしたところ、答えは vultureになりました。
ResNetクラスのコードか、学習済みのパラメータに問題があるかもしれません。
ご検討をお願いします。
以上

ResNetのコードを修正しました。

ご参考ください。
5cabcd4
ref #26