root_dir = "dataset/train"
label_dir = 'ants'
path = os.path.join(root_dir,label_dir)
连接两个或更多的路径名组件
如果各组件名首字母不包含’/’,则函数会自动加上
如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
如果最后一个组件为空,则生成的路径以一个’/'分隔符结尾
一个函数的变量不能传递给另外一个函数中的变量,self可以把self指定的一个变量给后面函数使用,相当于指定了一个类的全局变量
用于返回指定的文件夹包含的文件或文件夹的名字的列表
PIL 是 Python Image Library 的简称。PIL 是第三方库,使用之前需要先安装。
pip install pillow
PIL 库中提供了诸多用来处理图片的模块,可以对图片做类似于 PS(Photoshop) 的编辑。比如:改变图像大小、旋转图像、图像格式转换,转换颜色通道,图像增强,直方图处理,插值和滤波等等。
因为少安装了pillow和image这两个包,在pycharm的终端里输入以下代码:
pip3 install pillow -image -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install scikit-image -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
Tensorboard原本是Google TensorFlow的可视化工具,可以用于记录训练数据、评估数据、网络结构、图像等,并且可以在web上展示,对于观察神经网络的过程非常有帮助。PyTorch也推出了自己的可视化工具,一个是tensorboardX包,一个是torch.utils.tensorboard,二者的使用相差不大。
具体学习参考:详解Tensorboard及使用教程_进击的南方仔的博客-CSDN博客_tensorboard使用
logdir:事件文件所在文件夹名
为了防止和别人冲突,指定端口:
否则会出错:
#指定前
writer.add_image("test",img_array,1)
#指定后
writer.add_image("test",img_array,1,dataformats='HWC')
transform:主要是对图片进行一些变换
windows系统中绝对路径中的斜杠/会被当成转义符:
解决办法:
(1)用相对路径
(2)在字符串前加r,取消转义:
CTRL+P
相当于构造方法,是把类当作函数使用的时候定义
class Person:
def __call__(self, name):
print("__call__" + "Hello" + name)
def hello(self,name):
print("hello"+name)
person = Person()
person("zuosan")
person.hello("lisi")
person.hello()
compose()类会将transforms列表里面的transform操作进行遍历
compose()中的参数需要是一个列表,python中,列表的表示形式为[数据1,数据2,……]
在compose中,数据需要是transforms类型,所以得到([transforms参数1,transforms参数2,……])
# ToTensor的使用
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor",img_tensor)
writer.close()
(input-x)/ x = 2*input - 1
(1)print
(2)print(type())
(3)debug
原因:init方法应该是敲错了 ,打成了int
或:RuntimeError: mean(): input dtype should be either floating point or complex dtypes. Got Long instead.
原因:最大池化无法对Long数据类型进行实现/要求是浮点数,不能是整形的Long
解决:在input里加入:dtype=torch.float32
#不保留原始数据
input = -1
Relu(input,inplace=True)
Input=0
#保留原始数据,防止数据丢失
input=-1
Output=Relu(input,inplace=False)
Input=-1
Output=0
解决:dataloader的drop_last设置为True
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
class Zuosan(nn.Module):
def __init__(self):
super(Zuosan, self).__init__()
self.conv1 = Conv2d(3, 32, 5, padding=2)
self.maxpool1 = MaxPool2d(2)
self.conv2 = Conv2d(32, 32, 5, padding=2)
self.maxpool2 = MaxPool2d(2)
self.conv3 = Conv2d(32, 64, 5, padding=2)
self.maxpool3 = MaxPool2d(2)
self.flatten = Flatten()
self.linear1 = Linear(1024, 64)
self.linear2 = Linear(64, 10)
)
def forward(self,x):
x = self.conv1(x)
x = self.maxpool1(x)
x = self.conv2(x)
x = self.maxpool2(x)
x = self.conv3(x)
x = self.maxpool3(x)
x = self.flatten(x)
x = self.linear1(x)
x = self.linear2(x)
return x
zuosan = Zuosan()
print(zuosan)
input = torch.ones((64,3,32,32))
output = zuosan(input)
print(output.shape)
#简洁版
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
class Zuosan(nn.Module):
def __init__(self):
super(Zuosan, self).__init__()
self.model1 = Sequential(
Conv2d(3, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding=2),
MaxPool2d(2),
Flatten(),
Linear(1024, 64),
Linear(64, 10)
)
def forward(self,x):
x = self.model1(x)
return x
zuosan = Zuosan()
print(zuosan)
input = torch.ones((64,3,32,32))
output = zuosan(input)
print(output.shape)
reference:深度学习中的batch、epoch、iteration的含义_bboysky45的博客-CSDN博客_epoch
(1)batchsize:批大小。在深度学习中,一般采用SGD(梯度下降法)训练,即每次训练在训练集中batchsize个样本训练;
(2)iteration:1个iteration等于使用batchsize个样本训练一次;
(3)epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲epoch的值就是整个数据集被轮几次。
因为使用Pytorch下载网络模型时由于网络等的原因导致模型参数下载不完整造成的,可以去到下载模型的文件夹:.cache\torch\hub\checkpoints中将其删除,然后再重新下载,找不到.cache文件可能是文件被隐藏了,CTRL+alt+H可找到被隐藏的文件。
如果下载太慢,可以将地址复制到迅雷下载
问题:输入图像大小不匹配问题 size mismatch
经过检查发现是由于在全连接层时矩阵维度大小问题,将维度64*4*4写成了64*64
ToTensor没加括号
如下:
持续更新ing……………………………………