【无标题】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录一下看了pytorch深度学习入门与实战后得一些收获。刚开始学习pytorch,一些理解可能不是很正确,欢迎大家交流讨论。

提示:以下是本篇文章正文内容,下面案例可供参考

import numpy as np
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Image
import os
os.environ[‘KMP_DUPLICATE_LIB_OK’]=‘TRUE’

读取图像–转化为灰度图–转化为numpy数组

my=Image.open(“data/flower.png”)
my=np.array(my.convert(“L”),dtype=np.float32) # .convert(“L”)为灰度图像,像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。

可视化图片

figsize指定figure的宽和高

plt.figure(figsize=(8,8))
plt.imshow(my, cmap=plt.cm.gray)
plt.axis(“off”)
plt.show()
imh, imw=my.shape

输出结果为416 416

print(imh, imw)

卷积时需要将图像转化为四维表示[batch,channel,h,w]

myimgray_t=torch.as_tensor(my.reshape((1,1,imh,imw)))
print(myimgray_t.shape)
kersize=5 # 定义边缘检测卷积核
ker=torch.ones(kersize,kersize,dtype=torch.float32)*-1
print(ker)
ker[2,2]=24
print(ker)
ker=ker.reshape((1,1,kersize,kersize)) # 转化为4维矩阵
print(ker)

进行卷积操作

conv2d=nn.Conv2d(1,2,(kersize,kersize),bias=False)
print(conv2d)

设置卷积时使用的核,第一个核采用边缘检测核,第二个核采用随机数核

因为上面写了输入通道数是1 输出通道是2 ,所以会输出两个矩阵

下面设置的是data[0]也就是代表第一个是边缘检测,第二个是随机数 要是data[1]就是第二个是边缘

但是不能是data[2] 因为一共就两个通道,data[2]代表第三个了 要是把输出通道设置为3 就不会报错了

conv2d.weight.data[0]=ker
print(conv2d.weight.data)
print("--------------------------")

对灰度图像进行卷积操作

图片已经转换成4维了,可以直接卷积

图片大小是416416 但是输出的是410412 卷积之后变小了

imconv2dout=conv2d(myimgray_t)
print(imconv2dout)
print(imconv2dout.shape)

对卷积后的输出进行维度压缩

imconv2dout_im=imconv2dout.data.squeeze() # 移除维度为1的维度

这样矩阵就变成了3维矩阵了。【【【有三个 本来上面是1,2,416,412有4个[ 现在移除维度为1的变成3个了

print(imconv2dout_im)
print(“卷积后尺寸:”,imconv2dout_im.shape)

可视化卷积后的图像

plt.figure(figsize=(12,6))

subplot(m,n,p)生成 m行n列的 m*n个子图,当前激活第p个子图。

plt.subplot(1,2,1)

激活第一个子图,展示的就是卷积层压缩后为0的

第一个子图用的是边缘检测

plt.imshow(imconv2dout_im[0],cmap=plt.cm.gray)
plt.axis(“off”)
plt.subplot(1,2,2)

# 激活第二个子图,展示的就是卷积层压缩后为1的

第二个子图用的是随机数检测

plt.imshow(imconv2dout_im[1],cmap=plt.cm.gray)
plt.axis(“off”)
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值