Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

p1ch2の結果について #22

Open
mikky1001 opened this issue Jun 15, 2022 · 4 comments
Open

p1ch2の結果について #22

mikky1001 opened this issue Jun 15, 2022 · 4 comments

Comments

@mikky1001
Copy link

ゴールデンレトリバーであるという結果が得られませんでした。
実行結果
('bucket, pail', 0.582305908203125)

懸念点として、resnet.eval()を実行したときにOutに何も表示されなかったことです。

環境はDockerHubから以下をpullして実行しています。
PCはM1Macです。

% docker run --rm -d -v $PWD:/app -p 8888:8888 \pman0214/pytorch_jupyterlab:1.9.0

ここで説明されているネットワークとは何を指しているのでしょうか?
合わせてお伺いできればと思います。

@mikky1001
Copy link
Author

追記です。
以下のようにして解決しましたが、まだ疑問が残っています。
resnet = models.resnet101(pretrained=True)

resnet = models.resnet101(pretrained=True).eval()
にして
resnet.eval()
を実行せずに後処理を実行した場合
結果が
('golden retriever', 96.29335021972656)
となりました。
やっていることは同じだと思うのですが、この場合にうまくいくようになったのは
どういった理由が考えられるでしょうか?

@Gin5050
Copy link
Owner

Gin5050 commented Jul 2, 2022

ご連絡ありがとうございます。
返信が遅くなり大変申し訳ございません。

お手数ですが、正確な回答のために元の実行コード(失敗したもの)を提供いただけますでしょうか?

またここからは推測ですが、元のコードではeval()を実行せずに推論が行われたのではないでしょうか。
eval()で推論モードにしない場合、モデルのdropoutやbatch normalizationが正しく計算されません。

試しに手元でeval()を実行せずに推論したところ、mikky1001様と同様の結果が得られました

('bucket, pail', 0.582305908203125)

参考:https://pytorch.org/tutorials/beginner/basics/saveloadrun_tutorial.html

@mikky1001
Copy link
Author

返信ありがとうございます。
以下がコードになります。
eval()についてはコード上では記述しておりました。

from torchvision import models

alexnet = models.alexnet()
resnet = models.resnet101(pretrained=True)

from torchvision import transforms
preprocess = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize(
            mean=[0.485, 0.456, 0.406],
            std=[0.229, 0.224, 0.225]
        )])
from PIL import Image

img = Image.open("data/bobby.jpeg")
img_t = preprocess(img)
import torch
batch_t = torch.unsqueeze(img_t, 0)
resnet.eval()
out = resnet(batch_t)
with open("data/imagenet_classes.txt") as f:
    labels = [line.strip() for line in f.readlines()]
_, index = torch.max(out, 1)
percentage = torch.nn.functional.softmax(out, dim=1)[0] *100
labels[index[0]],percentage[index[0]].item()

実行結果
('bucket, pail', 0.582305908203125)

また、resnet.eval()を実行した際の挙動として、記述部左の実行順を示す番号が表示されていません。
これが何かの役に立つかは分かりませんが。。。

すでに質問時に記述しておりますが、
resnet = models.resnet101(pretrained=True).eval()
と記述して実行した場合は求める答えを出すことができました。

よろしくお願いします。

@Gin5050
Copy link
Owner

Gin5050 commented Jul 2, 2022

mikky1001様

早速のご返信ありがとうございます。
また申し訳ありませんが、まだ原因の特定はできておりません。

こちらでいただいたコードとdocker環境で実行してみましたが、mikky1001様の現象は再現しませんでした。
(※ M1Macでの実行ではないため厳密に同じ環境ではありません)

可能であれば、Google colaboratoryで同様のコードを実行していただけないでしょうか。
(先ほど試したところ、正常に動作しました)
また、大変申し訳ありませんが、書籍内容はM1Macでの動作確認は実施しておらず、その他のコードに関しても期待通りの結果が得られない可能性があります

以上、よろしくお願いいたします

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants