参考视频:https://www.bilibili.com/video/BV1hE411t7RN?p=10&spm_id_from=pageDriver
1、tensorboard使用
1.1tensorboard中写入数据
训练过程loss变化,某一步模型的训练结果可视化(可以检测不同阶段的模型输出)。
from torch.utils.tensorboard import SummaryWriter # 按住ctrl键,鼠标放上边变为蓝色,点击
writer = SummaryWriter("logs")
# writer.add_image() # 添加图像
for i in range (100):
writer.add_scalar("y = x", i, i) # 添加标量
writer.close()
查看存储数据: tensorboard --logdir = logs; logdir = 事件文件所在文件夹名,(不定义时,会自动创建)
一台服务器可能有许多人训练网络,所以我们可以指定tensorboard的端口:
tensorboard --logdir = logs --port = 6007
1.2 tensorboard中写入图像
writer.add_image()中,输入图像必须是array或者tensor,故需要在add_image()中指定shape中每一个数字/维表示的含义。
img = Image.open(路径)
img_array = np.array(img)
writer.add_image("test", img_array, 1, dataformats = 'HWC')
1.3writer.add_graph(input_model):
可以输出神经网络结果图。
2、transform使用
structure部分可以直接查看类的结构。
报错,引入库:Alt+N+回车,或者直接点箭头,导入库。
ctrl+p可以看需要哪个参数。
把图片转换为tensor类:
# 创建一个tensor类型对象
trans_tensor = transforms.ToTensor()
# 实例化对象
tensor_img = trans_tensor(img)
2.1常见的transform
pytorch中的__call__(),
如果定义了__call__(),则进行实例化对象时,可直接传参,调用该方法;否则需要使用点的方式调用方法。
class Person:
def __call__(self, name):
print("__call__" + "hello" + name)
def hello(self, name):
print("hello" + name)
person = Person()
# 实例化对象直接调用
person("zhangsan")
# 使用.调用方法
person.hello("lisi")
compose(),把所有操作整合在一起,
Compose()中参数需要的是一个列表,python中列表的形式是[数据1,数据2,数据3...],在compose中数据需要是transforms类型,故:Compose([transforms参数1,transforms参数2,...])
ToTensor()把图像变为tensor进行处理。
Normlize(),进行归一化。
ToPILImage把tensor类型数据转化为PIL。
Resize(),如果只给一个边,会用最小的边匹配该值,并进行一个等比的缩放(不改变宽和高的比例)。
RandomCrop()随机裁剪,
与大小写无关进行的匹配。