

マイナビ出版から出ている「PyTorch実践入門」を進めるにあたり下記の問題が発生しました。  
本書の推奨環境はJupyterとなっている為、DockerHubから以下をpullしています。

[code]

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

runコマンド引用サイト

[M1 macな人たちに贈るpytorch+jupyterlab docker
image](https://qiita.com/pman0214/items/ec2c6831af67ecb3eb04)

参考書に沿って以下を実行し、

[code]

    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
    
[/code]

imgを呼び出すとフォルダに格納されている犬の画像が表示されてしまいます。  
求める挙動としてはインラインで

[code]

    <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1280x720 at 0xFFFF65190E80>
    
[/code]

と表示させたいです。（上記のインライン表示は”print(img)”で出力しています。）  
というのも、以下を実行すると

[code]

    img_t = preprocess(img)
    
[/code]

文字列がないのでエラーとして返されるためです。

[code]

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-35-5823a1581b62> in <module>
    ----> 1 img_t = preprocess(img)
    
    /usr/local/lib/python3.9/site-packages/torchvision/transforms/transforms.py in __call__(self, img)
         58     def __call__(self, img):
         59         for t in self.transforms:
    ---> 60             img = t(img)
         61         return img
         62 
    
    /usr/local/lib/python3.9/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
       1049         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
       1050                 or _global_forward_hooks or _global_forward_pre_hooks):
    -> 1051             return forward_call(*input, **kwargs)
       1052         # Do not call functions when jit is used
       1053         full_backward_hooks, non_full_backward_hooks = [], []
    
    /usr/local/lib/python3.9/site-packages/torchvision/transforms/transforms.py in forward(self, tensor)
        219             Tensor: Normalized Tensor image.
        220         """
    --> 221         return F.normalize(tensor, self.mean, self.std, self.inplace)
        222 
        223     def __repr__(self):
    
    /usr/local/lib/python3.9/site-packages/torchvision/transforms/functional.py in normalize(tensor, mean, std, inplace)
        328     std = torch.as_tensor(std, dtype=dtype, device=tensor.device)
        329     if (std == 0).any():
    --> 330         raise ValueError('std evaluated to zero after conversion to {}, leading to division by zero.'.format(dtype))
        331     if mean.ndim == 1:
        332         mean = mean.view(-1, 1, 1)
    
    ValueError: std evaluated to zero after conversion to torch.float32, leading to division by zero.
    
    
[/code]

さまざまサイトを調べましたが、参考書同様に

[code]

    img
    
[/code]

を実行すればインラインが、

[code]

    img.show()
    
[/code]

で画像が表示される。  
とあり、今回の挙動のような例が見つかりませんでした。  
jupyterLab側の設定なのか、そもそもコードが間違っているのか見当がつかないため  
知恵をお貸しください。

ちなみに、`img.show()` を実行しても特に何も起こりませんでした。  
また、 google colaboratoryで実行しても同様の挙動を確認しています。  
宜しくお願い致します。


CC BY-SA 4.0
2022-06-12T11:54:37.603
89357
2022-06-14T00:59:37.463
2022-06-12T16:31:30.947
53041
53041
question
python3 docker pytorch jupyter-lab pillow
jupyterLab でPILライブラリを使用した際に取り込んだ画像のインライン表示ができない。


当該事象について解決しましたので、顛末を書かせていただきます。

**問題箇所**

以下の `mean, std` に代入される配列の小数点とカンマを混同して記述しておりました。

[code]

    mean=[0.485, 0.456, 0,406]
    ,std=[0.229, 0,224, 0.225]
    
[/code]

正しくは以下のような記述になります。初歩的なミスでした。

[code]

    mean=[0.485, 0.456, 0.406],
    std=[0.229, 0.224, 0.225]
    
[/code]

また、インライン表示ができない旨の質問をさせて頂きましたが、本書の[リポジトリ内](https://github.com/Gin5050/deep-
learning-with-pytorch-
ja/blob/main/p1ch2/2_pre_trained_networks.ipynb)でも同様の挙動をしており仕様であると考えられます（問題が解決したので詳細調査は行いませんでした）。

今回コメントを頂きました kunif様 ご協力いただきありがとうございました。


CC BY-SA 4.0
2022-06-13T11:20:12.507
89366
2022-06-14T00:59:37.463
2022-06-14T00:59:37.463
3060
53041
89357
answer