继续复习PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】
1>转换为PIL格式
from PIL import Image
#PIL的Image模块打开指定路径下的图像文件,并将其存储在变量img中。路径字符串指定了图像文件的位置,该图像是一个蜜蜂的图片
img = Image.open("data_set/hymenoptera_data/train/bees/17209602_fe5a5a746f.jpg")
#这行代码打印出图像对象img。在Python中,打印图像对象通常会显示图像的尺寸和模式
print(img)
2>python中__call__的用法
class Person:
# 定义一个__call__函数,使得实例对象可以用括号的方式调用
def __call__(self, name):
print("__call__" + "Hello" + name)
# 定义一个hello函数,用于打印问候语
def hello(self, name):
print("hello" + name)
# 创建Person类的实例
person_instance = Person()
# 使用__call__方法,像调用函数一样调用实例对象
person_instance("华为") # 输出: __call__Hello华为
# 使用hello方法,像调用普通函数一样调用实例的hello方法
person_instance.hello("小米") # 输出: hello小米
这个示例中,person_instance
是 Person
类的一个实例。通过实现 __call__
方法,我们可以直接使用 person_instance("Kimi")
来调用这个实例,就像它是一个函数一样。这将打印出 "__call__Hello华为"
。
同时,我们也可以通过点操作符 .
来调用 hello
方法,像这样:person_instance.hello("Kimi")
。这将打印出 "hello小米"
。
3>ToTensor() 输入参数为PIL格式或者ndarray格式转化为tensor
from PIL import Image # 导入PIL库中的Image模块,用于处理图像。
from torch.utils.tensorboard import SummaryWriter # 从PyTorch中导入SummaryWriter,用于创建和写入TensorBoard日志。
from torchvision import transforms # 从torchvision库导入transforms模块,包含图像预处理的转换函数。
writer = SummaryWriter("logs") # 创建一个SummaryWriter实例,指定日志目录为"logs"。
# 使用PIL库打开图像文件,路径是原始字符串,避免反斜杠的转义问题。
img = Image.open(rE:\program1-Classified Protection Assessment\data_set\hymenoptera_data\train\bees\39672681_1302d204d1.jpg")
print(img) # 打印图像对象,显示图像的格式和大小。
# 创建ToTensor转换对象,用于将PIL图像转换为PyTorch张量。
trans_totensor = transforms.ToTensor()
# 应用ToTensor转换,将图像转换为张量。
img_tensor = trans_totensor(img)
# 将转换后的图像张量添加到TensorBoard日志中,使用标签"ToTensor"。
writer.add_image("ToTensor", img_tensor)
# 关闭SummaryWriter,确保所有日志数据都被写入到文件中。
writer.close()
在python终端中输入
tensorboard --logdir=logs
即可得到图像
4>Normalize()使用
代码实战:
# 打印原始图像张量中第一个通道的第一个像素点的第一个值
print(img_tensor[0][0][0])
# 创建Normalize转换对象,用于归一化处理
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
# 对原始图像张量img_tensor应用归一化
img_norm = trans_norm(img_tensor)
# print(img_norm[0][0][0]) # 打印归一化后的图像张量中第一个通道的第一个像素点的第一个值
print(img_norm[0][0][0])
# 创建一个SummaryWriter实例,用于写入TensorBoard日志
writer = SummaryWriter("logs")
# 使用SummaryWriter的add_image方法将原始图像张量添加到TensorBoard,标签为"before"
# 注意:add_image方法需要一个dataformats参数来指定图像张量的形状格式
writer.add_image("before", img_tensor, dataformats='CHW')
# 使用SummaryWriter的add_image方法将归一化后的图像张量添加到TensorBoard,标签为"Normalize"
writer.add_image("Normalize", img_norm, dataformats='CHW')
# 关闭SummaryWriter对象,确保所有日志数据都被写入
writer.close()
3、4部分整段代码:
from PIL import Image # 导入PIL库中的Image模块,用于处理图像。
from torch.utils.tensorboard import SummaryWriter # 从PyTorch中导入SummaryWriter,用于创建和写入TensorBoard日志。
from torchvision import transforms # 从torchvision库导入transforms模块,包含图像预处理的转换函数。
writer = SummaryWriter("logs") # 创建一个SummaryWriter实例,指定日志目录为"logs"。
# 使用PIL库打开图像文件,路径是原始字符串,避免反斜杠的转义问题。
img = Image.open(r"E:\program1-Classified Protection Assessment\data_set\hymenoptera_data\train\bees\39672681_1302d204d1.jpg")
print(img) # 打印图像对象,显示图像的格式和大小。
# 创建ToTensor转换对象,用于将PIL图像转换为PyTorch张量。
trans_totensor = transforms.ToTensor()
# 应用ToTensor转换,将图像转换为张量。
img_tensor = trans_totensor(img)
# 将转换后的图像张量添加到TensorBoard日志中,使用标签"ToTensor"。
writer.add_image("ToTensor", img_tensor)
# 关闭SummaryWriter,确保所有日志数据都被写入到文件中。
writer.close()
# 打印原始图像张量中第一个通道的第一个像素点的第一个值
print(img_tensor[0][0][0])
# 创建Normalize转换对象,用于归一化处理
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
# 对原始图像张量img_tensor应用归一化
img_norm = trans_norm(img_tensor)
# print(img_norm[0][0][0]) # 打印归一化后的图像张量中第一个通道的第一个像素点的第一个值
print(img_norm[0][0][0])
# 创建一个SummaryWriter实例,用于写入TensorBoard日志
writer = SummaryWriter("logs")
# 使用SummaryWriter的add_image方法将原始图像张量添加到TensorBoard,标签为"before"
# 注意:add_image方法需要一个dataformats参数来指定图像张量的形状格式
writer.add_image("before", img_tensor, dataformats='CHW')
# 使用SummaryWriter的add_image方法将归一化后的图像张量添加到TensorBoard,标签为"Normalize"
writer.add_image("Normalize", img_norm, dataformats='CHW')
# 关闭SummaryWriter对象,确保所有日志数据都被写入
writer.close()
结果:
然后我们在终端中输入:
tensorboard --logdir=data_set/logs
即可得到图像