第一期:?? juejin.cn/post/724000…
二、学习 TensorBoard
Ⅰ. TensorBoard 是什么
TensorBoard 是一个强大的可视化工具,也是一个Web应用程序套件。TensorBoard截至目前支持7种可视化,分别是Scalars、Images、Audio、Graphs、Distributions、Histograms和Embeddings。其中可视化的主要功能如下。
-
Scalars: 展示训练过程中的准确率、损失值、权重/偏置的变化情况
-
Images: 展示训练过程中记录的图像
-
Audio: 展示训练过程中记录的音频
-
Graphs: 展示模型的数据流图,以及训练在各个设备上消耗的内存和时间
-
Distributions: 展示训练过程中记录的数据的分部图
-
Histograms: 展示训练过程中记录的数据的柱状图
-
Embeddings: 展示词向量后的投影分部
Ⅱ. 使用 TensorBoard
-
安装 tensorboard
pip install tensorboard
-
创建 SummaryWriter 实例
from torch.utils.tensorboard import SummaryWriter # 创建SummaryWriter实例,并且可以指定一些参数,参数如下图 writer = SummaryWriter(log_dir="logs")
-
log_dir (str):指定了数据保存的文件夹,如果文件夹不存在则会创建一个。如果没有指定的话,默认的保存的文件夹是./runs/现在的时间_主机名
-
comment (string):给默认的log_dir添加的后缀,如果已经指定了log_dir的值,那么这个参数就不会生效
-
purge_step (int):TensorBoard在记录数据的时候有可能会崩溃,purge_step指定的step内的数据都被被丢弃
-
max_queue (int):在记录数据的时候,在内存中开的队列的长度,当队列慢了之后就会把数据写入磁盘文件中
-
flush_secs (int):以秒为单位的写入磁盘的间隔,默认120秒
-
filename_suffix (string):添加到log_dir中每个文件的后缀
-
-
添加数据
from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter(log_dir="logs") # 举个例子 # 第8次计算是5 # 第9次计算是10 # 第10次计算是6 writer.add_scalar(tag="test_scalar", scalar_value=5, global_step=8) writer.add_scalar(tag="test_scalar", scalar_value=10, global_step=9) writer.add_scalar(tag="test_scalar", scalar_value=6, global_step=10) # add_scalar 参数 # tag (str): 图表的标题,也是图的唯一标识 # scalar_value (float or string/blobname): 输出的数据 (相当于折线图的y轴) # global_step (int): 步 (相当于折线图的x轴) # walltime (float): 覆盖默认的walltime (time.time()) # new_style (boolean): 是使用新样式还是旧样式 writer.close()
运行上述代码我们会得到一下日志数据
# 控制台执行 tensorboard --logdir=logs
然后打开控制台输出的web端地址,即可查看我们的图标
这是所有支持的可视化数据
三、学习 Transforms
Ⅰ. Transforms 是什么
Transforms 是 torchvision 下的一个子模块,主要用于对图像进行转换等一系列预处理操作,其主要目的是对图像数据进行增强,进而提高模型的泛化能力。对图像预处理操作有数据中心化,缩放,裁剪,旋转,翻转,填充,添加噪声,灰度变换,线性变换,仿射变换,亮度,饱和度,对比变换等
Ⅱ. 使用 Transforms
-
安装 Transforms
pip install torchvision==0.15.0 --index-url https://download.pytorch.org/whl/cu117
-
使用 Transforms
from torchvision import transforms import cv2 as cv img = cv.imread("dataset/train/image/0013035.jpg") print(type(img)) tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img) print(type(tensor_img))
经过ToTensor 我们将
numpy.ndarray
类型的图片转成了 tensor 类型 -
Transforms 下的其他工具
from torchvision import transforms import cv2 as cv # 取一张图片 img = cv.imread("dataset/train/image/0013035.jpg") print(type(img)) # 将输入图像转成Tensor类型 tensor_trans = transforms.ToTensor() # 调用转换 tensor_img = tensor_trans(img) print(type(tensor_img)) # 将输入图像的大小调整为给定的大小。 resize_trans = transforms.Resize((300, 300)) # 将输入图像转成PIL的Image类型 PILImage_trans = transforms.ToPILImage() # 相当于一个流式操作,可以指定多个transforms transforms.Compose({tensor_trans, resize_trans, PILImage_trans}) # 归一化,标准化 # 处理后将数据标准化,即均值为0,标准差为1,使模型更容易收敛。 # 可参考此文章 https://blog.csdn.net/qimo601/article/details/126948204 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) #transforms 下还有很多工具,可.出来分别看一下
-
将上期的 Dataset 与本期的 Transforms、TensorBoard,联合使用
from read_data import MyDataset from torchvision import transforms from torch.utils.tensorboard import SummaryWriter # 创建 MyDataset 对象 my_dataset = MyDataset("dataset/train") # 拿到下标50和100的 image 和 label img50, label50 = my_dataset[50] img100, label100 = my_dataset[100] # 通过transforms将图片转为tensor类型 tensor_trans = transforms.ToTensor() tensor_img50 = tensor_trans(img50) tensor_img100 = tensor_trans(img100) # 使用tensorboard,对tensor类型图片进行预览 writer = SummaryWriter("logs") writer.add_image("test", tensor_img50, 50) writer.add_image("test", tensor_img100, 100) writer.close() # 效果如下图,在我们训练过程中,可以看一些训练过程的图片
四、下期预告
1. torchvision 中的数据集使用
2. DataLoader 的使用
五、下下期预告
1. 神经网络基本骨架Module的使用
2. 神经网络的卷积层
会尽快更新~~~ 快来关注一下~~~