PIL,matplotlib,pytorch tensor,visdom之间的图片显示问题

用pytorch训练模型过程中有时要显示图片,这里以mnist数据集为例,最方便的无疑是visdom,可以接受tensor格式的输入

visdom

vis.images(x,nrow=8,win='x source',opts=dict(
        title = 'x source'
    ))

这里的x维度是 [32, 1, 28 ,28]
显示效果:
在这里插入图片描述
注:x 未经规范化 transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) 处理
如果是经过规范化处理的数据要先进行反规范化:

    def denormalize( x_hat):
        """
        反normalize
        :return:
        """
        mean = [0.485, 0.456, 0.406]
        std = [0.229, 0.224, 0.225]

        # x_hat = (x-mean) / std
        mean = torch.tensor(mean).reshape(3, 1, 1)
        std = torch.tensor(std).reshape(3, 1, 1)

        x = x_hat * std + mean

        return x

【19/9/18】 如果用的是远程服务器,可以在xshell中设置利用 ssl 隧道将远程服务器上某个端口的上的内容映射到本地
在这里插入图片描述
在这里插入图片描述
这里相当于命令 ssh -L 127.0.0.1:8097:127.0.0.1:8097 account@serveraddess

经过上述设置,在本地打开浏览器 http://localhost:8097 就可以看到远程服务器上8097端口的内容了,熟悉的 fucking world 又回来了
在这里插入图片描述

PIL + matplotlib

注: 用 PIL.Image.show() 调用的是系统图片查看器,所以好像不能在jupyter页面上显示,至少colab上是不能显示

虽然用visdom很方便,但其有局限性。那就是只能在本地用,比如我如果去白嫖kaggle 或者 colab 的显卡就没法用visdom做可视化了
下面介绍用 PIL 结合 matplotlib 做多图片的显示。
还是mnist 数据集,x 为 tensor 格式数据 [32,1,28,28],需要注意的是这里的x在读取时经过了transforms.ToTensor(), # 转换成tensor 格式,并且压缩到[0 ,1],而且plt.imshow() 接受 二维 [h,w] 三维[h,w,channel] 的 numpy.ndarrry格式的输入,而图片在tensor中是以[c,h,w]存储的,可以通过维度变换进行转变,我用的是transforms.ToPILImage()

tf2 = transforms.ToPILImage()
fig = plt.figure()

for i in range(x.size(0)):  # x: [0 ~ 31]
    plt.subplot(4,8,i+1)
    img = tf2(x[i]).convert('L')  # to PIL img
    img=np.array(img)
    # print(img.shape,type(img),type(x[i]))
    # img=img.reshape(28,28,)
    # # print(img.shape, type(img))
    plt.imshow(img)

plt.show()

emmmm 感觉颜色不太对,不知道哪里的问题,找到问题再回来改了
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Systemd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值