提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 读取图像--转化为灰度图--转化为numpy数组
- 可视化图片
- figsize指定figure的宽和高
- 输出结果为416 416
- 卷积时需要将图像转化为四维表示[batch,channel,h,w]
- 进行卷积操作
- 因为上面写了输入通道数是1 输出通道是2 ,所以会输出两个矩阵
- 下面设置的是data[0]也就是代表第一个是边缘检测,第二个是随机数 要是data[1]就是第二个是边缘
- 但是不能是data[2] 因为一共就两个通道,data[2]代表第三个了 要是把输出通道设置为3 就不会报错了
- 对灰度图像进行卷积操作
- 图片已经转换成4维了,可以直接卷积
- 图片大小是416*416 但是输出的是410*412 卷积之后变小了
- 对卷积后的输出进行维度压缩
- 这样矩阵就变成了3维矩阵了。【【【有三个 本来上面是1,2,416,412有4个[ 现在移除维度为1的变成3个了
- 可视化卷积后的图像
- subplot(m,n,p)生成 m行n列的 m*n个子图,当前激活第p个子图。
- 激活第一个子图,展示的就是卷积层压缩后为0的
- 第一个子图用的是边缘检测
- # 激活第二个子图,展示的就是卷积层压缩后为1的
- 第二个子图用的是随机数检测
前言
记录一下看了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()