pytorch卷积一张图片
2020年10月19日 赛虎实习记录
搭建一个七层网络,卷积图片。
💪💪
import torch
import torch.nn as nn
from PIL import Image
import torchvision.transforms as trs
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__() # 调用父类的构造方法
# 开始搭建网络层
# 中间层
self.layers = nn.Sequential(
# 中间层第一层
nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=0),
nn.ReLU(), # 激活函数:给网络层提供非线性能力
nn.MaxPool2d(2, 2), # 池化层:加速卷积,N,16,15,15
#
nn.Conv2d(16, 64, 3, 1), # N, 64,13,13
nn.ReLU(),
#
nn.Conv2d(64, 70, 3, 1),
nn.ReLU(),
#
nn.Conv2d(70, 80, 3, 1), # N,80,12,12
nn.ReLU(),
#
nn.Conv2d(80, 128, 3, 1),
nn.ReLU(),
# 第六层
nn.Conv2d(128, 80, 3, 1),
nn.ReLU(),
# 第七层
nn.Conv2d(80, 128, 3, 1),
nn.ReLU()
)
# 输出层,根据中间层最后的形状进行定义
self.output_layer = nn.Sequential(
# 线性层
# nn.Linear(80 * 80 * 3, 10)
nn.Linear(128 * 169 * 237, 10) # (接收的特征数,输出结果数)
)
def forward(self, x): # 前向计算
h = self.layers(x) # 中间层,卷积(NCHW)
print(h.shape) # 获取中间层最后的形状
# 转换形状NCHW为NV
h = h.reshape(-1, 128 * 169 * 237) # 转换形状NCHW为NV
h = self.output_layer(h) # 输出层,线性(NV)
return h
if __name__ == '__main__':
net = Net()
img = Image.open("pic.jpg")
# 转化 image图片 为 tensor矩阵
x = trs.ToTensor()(img)
print(x.shape) # 查看形状CHW
x = x.reshape(1, 3, 365, 500) # 变形为NCHW
print(x.shape)
y = net(x)
print(y)
print(y.shape)
# x = torch.randn(1,3,32,32) #创建随机数据 1张3层的32*32的图片
# y = net(x)
# print(y.shape)
# print(y)
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果