使用pytorch处理自己的数据集
目录
1 返回本地文件中的数据集
2 根据当前已有的数据集创建每一个样本数据对应的标签
3 tensorboard的使用
4 transforms处理数据
tranfroms.Totensor的使用
transforms.Normalize的使用
transforms.Resize的使用
transforms.Compose使用
5 dataset_transforms使用
1 返回本地文件中的数据集
在这个操作中,当前数据集的上一级目录就是当前所有同一数据的label
import os
from torch.utils.data import Dataset
from PIL import Imageclass MyDataset(Dataset):def __init__(self, root_dir, label_dir):""":param root_dir: 根目录文件:param label_dir: 分类标签目录"""self.root_dir = root_dirself.label_dir = label_dirself.path = os.path.join(root_dir, label_dir)self.image_path_list = os.listdir(self.path)def __getitem__(self, idx):""":param idx: idx是自己文件夹下的每一个图片索引:return: 返回每一个图片对象和其对应的标签,对于返回类型可以直接调用image.show显示或者用于后续图像处理"""img_name = self.image_path_list[idx]ever_image_path = os.path.join(self.root_dir, self.label_dir, img_name)image = Image.open(ever_image_path)label = self.label_dirreturn image, labeldef __len__(self):return len(self.image_path_list)root_dir = 'G:\python_files\深度学习代码库\cats_and_dogs_small\\train'
label_dir = 'cats'
my_data = MyDataset(root_dir, label_dir)
first_pic, label = my_data[0] # 自动调用__getitem__(self, idx)
first_pic.show()
print("当前图片中动物所属label", label)
F:\Anaconda\envs\py38\python.exe G:/python_files/深度学习代码库/dataset/MyDataSet.py
当前图片中动物所属label cats
2 根据当前已有的数据集创建每一个样本数据对应的标签
import os
from torch.utils.data import Dataset
from PIL import Imageclass MyLabelData:def __init__(self, root_dir, target_dir, label_dir, label_name):""":param root_dir: 根目录:param target_dir: 生成标签的目录:param label_dir: 要生成为标签目录名称:param label_name: 生成的标签名称"""self.root_dir = root_dirself.target_dir = target_dirself.label_dir = label_dirself.label_name = label_nameself.image_name_list = os.listdir(os.path.join(root_dir, target_dir))def label(self):for name in self.image_name_list:file_name = name.split(".jpg", 1)[0]label_path = os.path.join(self.root_dir, self.label_dir)if not os.path.exists(label_path):os.makedirs(label_path)with open(os.path.join(label_path, '{}'.format(file_name)), 'w') as f:f.write(self.label_name)f.close()
root_dir = 'G:\python_files\深度学习代码库\cats_and_dogs_small\\train'
target_dir = 'cats'
label_dir = 'cats_label'
label_name = 'cat'
label = MyLabelData(root_dir, target_dir, label_dir, label_name)
label.label()
这样上面的代码中的训练集目录下的每一个样本都会在train的cats_label目录下创建其对应的分类标签
每一个标签中文件中都有一个cat字符串或者其他动物的分类名称,以确定它到底是哪一个动物
3 tensorboard的使用
# tensorboard --logdir=深度学习代码库/logs --port=2001
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('logs')
for i in range(100):writer.add_scalar('当前的函数表达式y=3*x',i*3,i)
writer.close()
#-----------------------------------------------------------
import numpy as np
from PIL import Image
image_PIL = Image.open('G:\python_files\深度学习代码库\cats_and_dogs_small\\train\cats\cat.1.jpg')
image_numpy = np.array(image_PIL)
print(type(image_numpy))
print(image_numpy.shape)
writer.add_image('cat图片', image_numpy,2, dataformats='HWC')
这里使用tensorboard的作用是为了更好的展示数据,但是对于函数的使用,比如上面的add_image中的参数,最好的方式是点击源码查看其对应的参数类型,然后根据实际需要将它所需的数据类型丢给add_image就好,而在源码中该函数的参数中所要求的图片类型必须是tensor类型或者是numpy,所以想要使用tensorboard展示数据就首先必须使用numpy或者使用transforms.Totensor将其转化为tensor,然后丢给add_image函数
还有一个需要注意的是,使用add_image函数,图片的tensor类型或者numpy类型必须和dataformats的默认数据类型一样,否则根据图片的数据类型修改后面的额dataformatas就好
4 transforms处理数据
tranfroms.Totensor的使用
import numpy as np
from torchvision import transforms
from PIL import Image
tran = transforms.ToTensor()
PIL_image = Image.open('G:\python_files\深度学习代码库\\cats\cat\cat.11.jpg')
tensor_pic = tran(PIL_image)
print(tensor_pic)
print(tensor_pic.shape)
from torch.utils.tensorboard import SummaryWriter
write = SummaryWriter('logs')
write.add_image('Tensor_picture',tensor_pic)
tensor([[[0.9216, 0.9059, 0.8353, ..., 0.2392, 0.2275, 0.2078],
[0.9765, 0.9216, 0.8118, ..., 0.2431, 0.2392, 0.2235],
[0.9490, 0.8745, 0.7608, ..., 0.2471, 0.2471, 0.2314],
...,
[0.3490, 0.4902, 0.6667, ..., 0.7804, 0.7804, 0.7804],
[0.3412, 0.4431, 0.5216, ..., 0.7765, 0.7922, 0.7882],
[0.3490, 0.4510, 0.5294, ..., 0.7765, 0.7922, 0.7882]],
[[0.9451, 0.9294, 0.8706, ..., 0.2980, 0.2863, 0.2667],
[1.0000, 0.9451, 0.8471, ..., 0.3020, 0.2980, 0.2824],
[0.9725, 0.8980, 0.7961, ..., 0.2980, 0.2980, 0.2824],
...,
[0.3725, 0.5137, 0.6902, ..., 0.8431, 0.8431, 0.8431],
[0.3647, 0.4667, 0.5451, ..., 0.8392, 0.8549, 0.8510],
[0.3608, 0.4627, 0.5412, ..., 0.8392, 0.8549, 0.8510]],
[[0.9294, 0.9137, 0.8588, ..., 0.2235, 0.2118, 0.1922],
[0.9922, 0.9373, 0.8353, ..., 0.2275, 0.2235, 0.2078],
[0.9725, 0.8980, 0.7922, ..., 0.2275, 0.2275, 0.2118],
...,
[0.4196, 0.5608, 0.7373, ..., 0.9412, 0.9412, 0.9333],
[0.4196, 0.5216, 0.6000, ..., 0.9373, 0.9529, 0.9412],
[0.4196, 0.5216, 0.6000, ..., 0.9373, 0.9529, 0.9412]]])
torch.Size([3, 410, 431])
transforms.Normalize的使用
# 对应三个通道,每一个通道一个平均值和方差
# output[channel] = (input[channel] - mean[channel]) / std[channel]
nor = transforms.Normalize([0.5, 0.5, 0.5],[10, 0.5, 0.5])
print(tensor_pic[0][0][0])
x_nor = nor(tensor_pic)
write.add_image('nor_picture:', x_nor)
print(tensor_pic[0][0][0])
write.close()
打开源码查看
def forward(self, tensor: Tensor) -> Tensor:"""Args:tensor (Tensor): Tensor image to be normalized.Returns:Tensor: Normalized Tensor image."""return F.normalize(tensor, self.mean, self.std, self.inplace)必须传入的是tensor数据类型
transforms.Resize的使用
size_tensor = transforms.Resize((512,512))
# 裁剪tensor
tensor_pic_size = size_tensor(tensor_pic)
# 裁剪Image
size_pic = transforms.Resize((512,512))
image_size = size_pic(PIL_image)
print(image_size)
write.add_image('tensor_pic_size',tensor_pic_size)
print(tensor_pic_size.shape)
np_image = np.array(image_size)
print('np_image.shape:', np_image.shape)
write.add_image('image_size', np_image, dataformats='HWC')
调用Resize的时候,需要传入的数据类型的要求,查看源码如下
def forward(self, img):"""Args:img (PIL Image or Tensor): Image to be scaled.Returns:PIL Image or Tensor: Rescaled image."""return F.resize(img, self.size, self.interpolation)
<PIL.Image.Image image mode=RGB size=512x512 at 0x1A72B1E7D00>
torch.Size([3, 512, 512])
np_image.shape: (512, 512, 3)
transforms.Compose使用
nor = transforms.Normalize([0.5, 0.5, 0.5],[10, 0.5, 0.5])
trans_resize_2 = transforms.Resize((64,64))
trans_to_tensor = transforms.ToTensor()
trans_compose = transforms.Compose([trans_resize_2, trans_to_tensor])
tensor_pic_compose = trans_compose(PIL_image)
write.add_image('tensor_pic_compose',tensor_pic_compose,dataformats='CHW')
class Compose:"""Composes several transforms together. This transform does not support torchscript.Please, see the note below.Args:transforms (list of ``Transform`` objects): list of transforms to compose.Example:>>> transforms.Compose([>>> transforms.CenterCrop(10),>>> transforms.ToTensor(),>>> ]).. note::In order to script the transformations, please use ``torch.nn.Sequential`` as below.>>> transforms = torch.nn.Sequential(>>> transforms.CenterCrop(10),>>> transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),>>> )>>> scripted_transforms = torch.jit.script(transforms)Make sure to use only scriptable transformations, i.e. that work with ``torch.Tensor``, does not require`lambda` functions or ``PIL.Image``."""def __init__(self, transforms):self.transforms = transformsdef __call__(self, img):for t in self.transforms:img = t(img)return imgdef __repr__(self):format_string = self.__class__.__name__ + '('for t in self.transforms:format_string += '\n'format_string += ' {0}'.format(t)format_string += '\n)'return format_string
5 dataset_transforms使用
from torch.utils.data import DataLoader
from torchvision import transforms
import torchvision
data_transform = transforms.Compose([transforms.ToTensor()])
train_data = torchvision.datasets.CIFAR10('./data', train=True, download=True)
test_data = torchvision.datasets.CIFAR10('./data', train=False, download=True)
print("train_data", train_data)
# 原始的数据集中每一条数据中包含以一张图片和该图片所属的类别
print("train_data[0]", train_data[0])
print("train_data.classes", train_data.classes)
image, label = train_data[0]
print("label ",label)
image.show()
print("train_data.classes[label]", train_data.classes[label])
train_data Dataset CIFAR10
Number of datapoints: 50000
Root location: ./data
Split: Train
train_data[0] (<PIL.Image.Image image mode=RGB size=32x32 at 0x144ED58D970>, 6)
train_data.classes ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
label 6
train_data.classes[label] frog
#%%
from torchvision import transforms
import torchvision
# 将整个数据集转化为tensor类型
data_transform1 = transforms.Compose([transforms.ToTensor()])
train_data = torchvision.datasets.CIFAR10('./data', train=True, transform=data_transform1, download=True)
test_data1 = torchvision.datasets.CIFAR10('./data', train=False, transform=data_transform1, download=True)
from torch.utils.tensorboard import SummaryWriter
write = SummaryWriter('batch_picture')
for i in range(10):tensor_pic, label = train_data[i] # 经过前面的transforms成了tensorprint(tensor_pic.shape)write.add_image('batch_picture', tensor_pic, i)
write.close()
Files already downloaded and verified
Files already downloaded and verified
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'):"""Add image data to summary.Note that this requires the ``pillow`` package.Args:tag (string): Data identifierimg_tensor (torch.Tensor, numpy.array, or string/blobname): Image dataglobal_step (int): Global step value to recordwalltime (float): Optional override default walltime (time.time())seconds after epoch of eventShape:img_tensor: Default is :math:`(3, H, W)`. You can use ``torchvision.utils.make_grid()`` toconvert a batch of tensor into 3xHxW format or call ``add_images`` and let us do the job.Tensor with :math:`(1, H, W)`, :math:`(H, W)`, :math:`(H, W, 3)` is also suitable as long ascorresponding ``dataformats`` argument is passed, e.g. ``CHW``, ``HWC``, ``HW``.Examples::from torch.utils.tensorboard import SummaryWriterimport numpy as npimg = np.zeros((3, 100, 100))img[0] = np.arange(0, 10000).reshape(100, 100) / 10000img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000img_HWC = np.zeros((100, 100, 3))img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000writer = SummaryWriter()writer.add_image('my_image', img, 0)# If you have non-default dimension setting, set the dataformats argument.writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')writer.close()Expected result:.. image:: _static/img/tensorboard/add_image.png:scale: 50 %"""torch._C._log_api_usage_once("tensorboard.logging.add_image")if self._check_caffe2_blob(img_tensor):from caffe2.python import workspaceimg_tensor = workspace.FetchBlob(img_tensor)self._get_file_writer().add_summary(image(tag, img_tensor, dataformats=dataformats), global_step, walltime)
from torchvision import transforms
import torchvision
# 将整个数据集转化为tensor类型
data_transform = transforms.Compose([transforms.ToTensor()])
train_data = torchvision.datasets.CIFAR10('./data', train=True, transform=data_transform, download=True)
test_data = torchvision.datasets.CIFAR10('./data', train=False, transform=data_transform, download=True)
# dataLoad会将原始数据中一个batch中的图片和图片的Label分别放在一起,形成对应
train_data_load = DataLoader(dataset=train_data, shuffle=True, batch_size=64,)
from torch.utils.tensorboard import SummaryWriter
write = SummaryWriter('dataLoad')
# 遍历整个load,一次遍历的图片是64个
for batch_id, data in enumerate(train_data_load):# 经过DataLoda之后,每一个批次返回一批图片和该图片对应的标签类别print('data',data)batch_image, batch_label = dataprint("batch_id",batch_id)print("image.shape", batch_image.shape)print("label.shape", batch_label.shape)write.add_images('batch_load_picture', batch_image, batch_id, dataformats='NCHW')
write.close()
其中一个批次的输出结果展示 batch_id 646 image.shape torch.Size([64, 3, 32, 32]) label.shape torch.Size([64]) data [tensor([[[[0.2510, 0.3804, 0.5176, ..., 0.5529, 0.5451, 0.2980],[0.2706, 0.6000, 0.6667, ..., 0.5686, 0.3961, 0.1176],[0.2745, 0.6627, 0.6980, ..., 0.3961, 0.1608, 0.0824],...,[0.6863, 0.6824, 0.5333, ..., 0.2941, 0.4863, 0.5059],[0.5804, 0.6784, 0.4902, ..., 0.1451, 0.2824, 0.3451],[0.4353, 0.4353, 0.5098, ..., 0.1373, 0.1529, 0.2902]],[[0.3020, 0.4549, 0.6078, ..., 0.6627, 0.6353, 0.3608],[0.3451, 0.6980, 0.7765, ..., 0.6745, 0.4706, 0.1647],[0.3490, 0.7529, 0.8039, ..., 0.4667, 0.2000, 0.1137],...,[0.8196, 0.8157, 0.6157, ..., 0.3608, 0.5529, 0.5804],[0.7137, 0.8039, 0.5686, ..., 0.1922, 0.3373, 0.4078],[0.5412, 0.5333, 0.5765, ..., 0.1765, 0.2000, 0.3490]],[[0.3098, 0.5490, 0.7412, ..., 0.8314, 0.7373, 0.3765],[0.3765, 0.8392, 0.9569, ..., 0.7686, 0.4941, 0.1216],[0.3843, 0.9176, 1.0000, ..., 0.4627, 0.1490, 0.0588],...,[0.9843, 0.9922, 0.7373, ..., 0.3882, 0.6353, 0.7255],[0.8039, 0.9373, 0.6745, ..., 0.1804, 0.3647, 0.4941],[0.6471, 0.6549, 0.6980, ..., 0.1569, 0.2000, 0.3961]]],[[[0.9608, 0.9490, 0.9529, ..., 0.8314, 0.8196, 0.8235],[0.9255, 0.9216, 0.9333, ..., 0.8275, 0.8196, 0.8235],[0.9137, 0.9137, 0.9294, ..., 0.8392, 0.8314, 0.8353],...,[0.4118, 0.4353, 0.4431, ..., 0.4157, 0.4431, 0.4275],[0.4667, 0.4667, 0.4627, ..., 0.3961, 0.3804, 0.3882],[0.4392, 0.4235, 0.4235, ..., 0.5490, 0.4471, 0.4706]],[[0.9647, 0.9529, 0.9529, ..., 0.8745, 0.8667, 0.8667],[0.9294, 0.9255, 0.9333, ..., 0.8627, 0.8549, 0.8549],[0.9137, 0.9176, 0.9294, ..., 0.8627, 0.8588, 0.8549],...,[0.4196, 0.4392, 0.4471, ..., 0.4314, 0.4627, 0.4510],[0.4745, 0.4745, 0.4706, ..., 0.4078, 0.4039, 0.4118],[0.4471, 0.4314, 0.4314, ..., 0.5608, 0.4667, 0.4863]],[[0.9765, 0.9686, 0.9647, ..., 0.9412, 0.9373, 0.9569],[0.9451, 0.9412, 0.9529, ..., 0.9216, 0.9216, 0.9373],[0.9451, 0.9451, 0.9569, ..., 0.9176, 0.9176, 0.9333],...,[0.4078, 0.4314, 0.4353, ..., 0.4353, 0.4706, 0.4588],[0.4627, 0.4627, 0.4588, ..., 0.4118, 0.4118, 0.4157],[0.4353, 0.4196, 0.4196, ..., 0.5569, 0.4627, 0.4863]]],[[[0.9569, 0.9569, 0.9647, ..., 0.8510, 0.8353, 0.8235],[0.9569, 0.9569, 0.9608, ..., 0.8627, 0.8431, 0.8392],[0.9804, 0.9725, 0.9725, ..., 0.8745, 0.8627, 0.8549],...,[0.3725, 0.3882, 0.3922, ..., 0.3647, 0.3725, 0.3686],[0.3882, 0.4000, 0.4157, ..., 0.3882, 0.3804, 0.3608],[0.3882, 0.4000, 0.4118, ..., 0.3725, 0.3608, 0.3490]],[[0.9608, 0.9608, 0.9686, ..., 0.8706, 0.8549, 0.8392],[0.9608, 0.9608, 0.9686, ..., 0.8784, 0.8549, 0.8510],[0.9843, 0.9765, 0.9804, ..., 0.8863, 0.8745, 0.8627],...,[0.3804, 0.3922, 0.3961, ..., 0.3255, 0.3529, 0.3686],[0.3961, 0.4078, 0.4235, ..., 0.3647, 0.3686, 0.3647],[0.3961, 0.4078, 0.4196, ..., 0.3843, 0.3686, 0.3569]],[[0.9843, 0.9765, 0.9804, ..., 0.9294, 0.9176, 0.9137],[0.9804, 0.9686, 0.9725, ..., 0.9216, 0.9059, 0.9098],[0.9961, 0.9804, 0.9765, ..., 0.9137, 0.9098, 0.9098],...,[0.3725, 0.3882, 0.3922, ..., 0.2902, 0.3255, 0.3686],[0.3922, 0.4039, 0.4196, ..., 0.3412, 0.3490, 0.3608],[0.3922, 0.4039, 0.4157, ..., 0.3843, 0.3686, 0.3529]]],...,[[[0.8902, 0.8863, 0.8824, ..., 0.8314, 0.8392, 0.8353],[0.8902, 0.8863, 0.8863, ..., 0.8353, 0.8431, 0.8392],[0.8902, 0.8863, 0.8902, ..., 0.8392, 0.8431, 0.8431],...,[0.9569, 0.9529, 0.9569, ..., 0.5765, 0.5843, 0.5961],[0.9686, 0.9647, 0.9608, ..., 0.9412, 0.9255, 0.9255],[0.9804, 0.9765, 0.9725, ..., 0.9255, 0.9176, 0.9176]],[[0.9176, 0.9137, 0.9098, ..., 0.8667, 0.8745, 0.8706],[0.9176, 0.9137, 0.9137, ..., 0.8706, 0.8784, 0.8745],[0.9176, 0.9137, 0.9176, ..., 0.8784, 0.8824, 0.8784],...,[0.9608, 0.9569, 0.9608, ..., 0.6392, 0.6667, 0.6706],[0.9765, 0.9725, 0.9647, ..., 0.9608, 0.9765, 0.9725],[0.9882, 0.9843, 0.9804, ..., 0.9255, 0.9451, 0.9490]],[[0.9412, 0.9373, 0.9333, ..., 0.9255, 0.9333, 0.9294],[0.9412, 0.9373, 0.9373, ..., 0.9294, 0.9373, 0.9333],[0.9412, 0.9373, 0.9412, ..., 0.9294, 0.9333, 0.9333],...,[0.9686, 0.9647, 0.9686, ..., 0.6667, 0.6824, 0.6863],[0.9725, 0.9686, 0.9647, ..., 0.9804, 0.9804, 0.9804],[0.9843, 0.9804, 0.9765, ..., 0.9373, 0.9451, 0.9490]]],[[[0.1725, 0.1725, 0.1804, ..., 0.1255, 0.1255, 0.1255],[0.1922, 0.1882, 0.1843, ..., 0.1333, 0.1373, 0.1333],[0.1961, 0.1922, 0.1882, ..., 0.1412, 0.1412, 0.1333],...,[0.4471, 0.4902, 0.5137, ..., 0.5647, 0.5725, 0.5961],[0.4431, 0.4706, 0.4824, ..., 0.5608, 0.5529, 0.5569],[0.4275, 0.4431, 0.4392, ..., 0.6078, 0.5608, 0.5176]],[[0.0980, 0.0980, 0.1059, ..., 0.0353, 0.0353, 0.0392],[0.1137, 0.1137, 0.1098, ..., 0.0431, 0.0471, 0.0471],[0.1216, 0.1176, 0.1137, ..., 0.0549, 0.0549, 0.0549],...,[0.2471, 0.2824, 0.3529, ..., 0.5490, 0.5451, 0.5608],[0.2510, 0.2980, 0.3765, ..., 0.5569, 0.5294, 0.5255],[0.2471, 0.3059, 0.3765, ..., 0.6078, 0.5451, 0.4902]],[[0.0431, 0.0431, 0.0510, ..., 0.0118, 0.0118, 0.0118],[0.0588, 0.0588, 0.0549, ..., 0.0118, 0.0118, 0.0118],[0.0667, 0.0627, 0.0588, ..., 0.0118, 0.0118, 0.0118],...,[0.2431, 0.2745, 0.3176, ..., 0.5373, 0.5608, 0.5804],[0.2510, 0.2824, 0.3294, ..., 0.5490, 0.5412, 0.5412],[0.2510, 0.2863, 0.3216, ..., 0.6000, 0.5529, 0.4980]]],[[[0.6353, 0.6314, 0.6314, ..., 0.6157, 0.6157, 0.6157],[0.6353, 0.6314, 0.6314, ..., 0.6157, 0.6157, 0.6157],[0.6353, 0.6314, 0.6314, ..., 0.6157, 0.6157, 0.6157],...,[0.6471, 0.6431, 0.6431, ..., 0.6392, 0.6392, 0.6392],[0.6471, 0.6431, 0.6431, ..., 0.6392, 0.6392, 0.6392],[0.6471, 0.6431, 0.6431, ..., 0.6392, 0.6392, 0.6392]],[[0.7804, 0.7765, 0.7765, ..., 0.7725, 0.7725, 0.7686],[0.7804, 0.7765, 0.7765, ..., 0.7725, 0.7725, 0.7686],[0.7804, 0.7765, 0.7765, ..., 0.7725, 0.7725, 0.7686],...,[0.7922, 0.7882, 0.7882, ..., 0.7843, 0.7843, 0.7843],[0.7922, 0.7882, 0.7882, ..., 0.7843, 0.7843, 0.7843],[0.7922, 0.7882, 0.7882, ..., 0.7843, 0.7843, 0.7843]],[[0.9882, 0.9804, 0.9843, ..., 0.9765, 0.9765, 0.9765],[0.9882, 0.9804, 0.9843, ..., 0.9765, 0.9765, 0.9765],[0.9882, 0.9804, 0.9843, ..., 0.9765, 0.9765, 0.9765],...,[0.9961, 0.9882, 0.9922, ..., 0.9882, 0.9882, 0.9882],[0.9961, 0.9882, 0.9922, ..., 0.9882, 0.9882, 0.9882],[0.9961, 0.9882, 0.9922, ..., 0.9882, 0.9882, 0.9882]]]]), tensor([2, 8, 9, 6, 9, 3, 8, 3, 7, 7, 7, 3, 9, 2, 3, 1, 0, 1, 9, 6, 7, 6, 7, 9,1, 1, 8, 9, 2, 7, 5, 0, 1, 5, 9, 4, 2, 5, 7, 6, 3, 2, 2, 9, 4, 2, 1, 1,9, 5, 2, 5, 0, 8, 1, 7, 3, 5, 8, 0, 5, 0, 5, 0])]
使用add_images对所有批次的数据进行展示
def add_images(self, tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW'):"""Add batched image data to summary.Note that this requires the ``pillow`` package.Args:tag (string): Data identifierimg_tensor (torch.Tensor, numpy.array, or string/blobname): Image dataglobal_step (int): Global step value to recordwalltime (float): Optional override default walltime (time.time())seconds after epoch of eventdataformats (string): Image data format specification of the formNCHW, NHWC, CHW, HWC, HW, WH, etc.Shape:img_tensor: Default is :math:`(N, 3, H, W)`. If ``dataformats`` is specified, other shape will beaccepted. e.g. NCHW or NHWC.Examples::from torch.utils.tensorboard import SummaryWriterimport numpy as npimg_batch = np.zeros((16, 3, 100, 100))for i in range(16):img_batch[i, 0] = np.arange(0, 10000).reshape(100, 100) / 10000 / 16 * iimg_batch[i, 1] = (1 - np.arange(0, 10000).reshape(100, 100) / 10000) / 16 * iwriter = SummaryWriter()writer.add_images('my_image_batch', img_batch, 0)writer.close()Expected result:.. image:: _static/img/tensorboard/add_images.png:scale: 30 %"""torch._C._log_api_usage_once("tensorboard.logging.add_images")if self._check_caffe2_blob(img_tensor):from caffe2.python import workspaceimg_tensor = workspace.FetchBlob(img_tensor)self._get_file_writer().add_summary(image(tag, img_tensor, dataformats=dataformats), global_step, walltime)在使用add_images时要注意默认的通道数是3,如果经过卷积层以后的图片通道数大于3,那么是无法使用该函数进行显示的,会显示断言错误的信息,所以此时要使用torch.reshape将通道数变为3,然后可以正常调用
对于还未涉及的方法也是这样,查看其对应的参数类型(使用crtl+p,或者直接crtl+鼠标点击相应的函数查看源码),将所需要的参数类型丢给它使用就好
相关文章:

使用pytorch处理自己的数据集
目录 1 返回本地文件中的数据集 2 根据当前已有的数据集创建每一个样本数据对应的标签 3 tensorboard的使用 4 transforms处理数据 tranfroms.Totensor的使用 transforms.Normalize的使用 transforms.Resize的使用 transforms.Compose使用 5 dataset_transforms使用 1 返回本地…...

http进一步认识
好久不见各位,今天为大家带来http协议的进一步认识 文章目录 👀http协议的认识👀新的改变 👀http协议的认识 http协议经历了三个版本的演化,HTTP0.9是第一个版本的协议,它的组成极其简单,只涉…...

grafana docker安装
grafana docker安装 Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。 Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器。Grafana 是开…...

【Kubernetes】初识k8s--扫盲阶段
文章目录 1、k8s概述2、为什么要有k8s2.1 回顾以往的应用部署方式2.2 容器具有的优势 3、k8s能带来什么 1、k8s概述 kubernetes是一个可移植、可扩展的开源平台,用于管理 容器化 的工作负载和服务,可促进申明式配置和自动化。kubernetes拥有一个庞大且快…...

“01”滴答“摩尔斯电码”加密解密单个字符
“01”替换滴嗒“.-”“摩尔斯电码”字符,加密解密键盘输入的单个字符。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&a…...

P3817 小A的糖果
Portal. 贪心。 注意到这里的盒子不会被删除,只会改变盒子的值。问题立刻简单化了。对于一组相邻的糖果个数和大于 x x x 的盒子组,优先吃掉靠后的盒子。 证明正确性也很显然,因为减少后面的盒子的糖果数可以使得后面的情况更优。 #incl…...

Yolov8目标识别与实例分割——算法原理详细解析
前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统,最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出,并随后进行了多次改进和迭代,产生了一系列不同版本的YOLO模型,如YOLOv2、YOLOv3、YOLOv4&a…...

HandlerMethodArgumentResolver方法参数解析器支持多用户
1、概述 HandlerMethodArgumentResolver,中文称为方法参数解析器,是Spring Web(SpringMVC)组件中的众多解析器之一,主要用来对Controller中方法的参数进行处理。 使用场景 在一般的接口调用场景下,每次调用Controller都需要检查请求中的token信息,并根据token还原用户信息…...

【Linux】 man命令使用
介绍 man命令是Linux下最核心的命令之一。而man命令也并不是英文单词“man”的意思,它是单词manual的缩写,即使用手册的意思。 man命令会列出一份完整的说明。 其内容包括命令语法、各选项的意义及相关命令 。更为强大的是,不仅可以查看Lin…...

同一个数据库服务器进行数据表间的数据迁移-MySQL
同一个数据库服务器进行数据表间的数据迁移 一、相同结构的表数据迁移/备份/导入到同一MySQL的某个库的某张表 实验目标:将t1.table_one的数据备份到migration_one.table_11(提醒:这两个表结构一致) 同一个MySQL中有很多库&…...

适用于 Linux 的 WPF:Avalonia
许多年前,在 WPF 成为“Windows Presentation Foundation”并将 XAML 作为 .NET、Windows 等的 UI 标记语言引入之前,有一个代号为“Avalon”的项目。Avalon 是 WPF 的代号。XAML 现在无处不在,XAML 标准是一个词汇规范。 Avalonia 是一个开…...

【教3妹学编程-算法题】数组中两个数的最大异或值
3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包” 2哥 :3妹,什么事呀这么开心呀。 3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。 2哥&…...

STM32-RTC实时时钟
目录 RTC实时时钟 功能框图 UNIX时间戳 初始化结构体 RTC时间结构体 RTC日期结构体 RTC闹钟结构体 进入和退出配置函数 实验环节1:显示日历 常规配置 RTC配置 测试环节 实验现象 实验环节2:闹钟 常规配置 RTC配置 测试环节 实验现象 R…...

初学Flutter,实现底部导航切换
效果展示 flutter bottomNavBar 主要实现代码 入口文件:main.dart import package:flutter/material.dart; import package:flutter_demo/components/bottomNavBar.dart; import package:flutter_demo/views/cart.dart; import package:flutter_demo/views/cata.d…...

使用JMeter进行接口压力测试
1.我首先创建一个线程组 2.创建好之后如图所示 3. 进行配置 4. 然后添加一个https请求 5.创建好之后设置请求方法和对应参数 6.设置表格监听器 7.创建好之后如图所示 8.保存jmx文件后点击运行进行测试,结果反馈如下图...

ElasticSearch集群架构实战及其原理剖析
ES集群架构 为什么要使用ES集群架构 分布式系统的可用性与扩展性: 高可用性 服务可用性:允许有节点停止服务;数据可用性:部分节点丢失,不会丢失数据; 可扩展性 请求量提升/数据的不断增长(将数据分布…...

选择适合你的办公桌:提高工作效率的关键
在如今的数字时代,越来越多的人将办公桌移到家里或办公室。但是,如何选择适合你的办公桌可能是个挑战。不同的工作需要和工作空间大小会影响你的选择。下面是一些简单的建议,帮助你找到适合你的办公桌,提高工作效率。 首先&…...

机器学习之多层感知机 MLP简洁实现 《动手深度学习》实例
🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…...

使用C#在Windows上调用7-zip压缩文件
使用C#在Windows上调用7-zip压缩文件 可以设置输出文件的路径也可以留空,留空则会在压缩文件创建一个同名的.压缩包 可以设置压缩包的密码 可以设置压缩包的加密方式(ASE-256),可以使用LZMA但是加密码会报错 可以设置压缩包的格式(zip),可以使用7z但是加…...

京东数据平台:2023年Q3季度黄金市场数据分析
继9月国内黄金市场持续上涨后,进入10月中下旬后,黄金行情再度反转,多家品牌金饰价格再次突破600元/克,达到611元/克。 今年以来,黄金行情不断走俏,销售市场也有明显增长。根据鲸参谋平台的数据显示…...

https原理
首先说一下几个概念:对称加密、非对称加密 对称加密: 客户端和服务端使用同一个秘钥,分两种情况: 1、所有的客户端和服务端使用同一个秘钥,这个秘钥被泄漏后数据不再安全 2、每个客户端生成一个秘钥&…...

FFmpeg直播能力更新计划与新版本发布
// 编者按:客户端作为直接面向用户大众的接口,随着技术的发展进化与时俱进,实现更好的服务是十分必要的。FFmpeg作为最受欢迎的视频和图像处理开源软件,被相关行业的大量用户青睐,而随着HEVC标准的发布到广泛使用&am…...

面试算法55:二叉搜索树迭代器
题目 请实现二叉搜索树的迭代器BSTIterator,它主要有如下3个函数。 构造函数:输入二叉搜索树的根节点初始化该迭代器。函数next:返回二叉搜索树中下一个最小的节点的值。函数hasNext:返回二叉搜索树是否还有下一个节点。 分析 …...

Linux Crontab 定时任务
crond 服务 Linux 通过 crond 服务来支持 crontab。 查看 crond 服务是否已经安装 输入下面命令确认 crond 服务是否已安装。 systemctl list-unit-files | grep crond 如果为 enabled,表示服务正运行。 crontab 文件 crontab 要执行的定时任务都被保存在 /etc…...

HiveSQL高级进阶技巧
目录 1.删除2.更新:3.行转列:4.列转行:5.分析函数:6.多维分析7.数据倾斜groupby:join: 掌握下面的技巧,你的SQL水平将有一个质的提升! 1.删除 正常hive删除操作基本都是覆盖原数据&…...

【Flutter】Flutter 动画深入解析(1):掌握 AnimationController 的使用
【Flutter】Flutter 动画深入解析(1):掌握 AnimationController 的使用 文章目录 一、前言二、AnimationController 简介三、AnimationController 的主要功能四、Ticker 提供者五、AnimationController 的生命周期六、与 AnimationController 一起使用的 Future七、实际业务…...

安装富文本组件
安装vue-ueditor-wrap3.x: vue-ueditor-wrap3.x:一个“包装”了 UEditor 的 Vue 组件,支持通过 v-model 来绑定富文本编辑器的内容,让 UEditor 的使用简单到像 Input 框一样。省去了初始化 UEditor、手动调用 getContentÿ…...

Tomcat下载地址(详细)
Apache Tomcat - Apache Tomcat 8 Software Downloadshttps://tomcat.apache.org/download-80.cgi2.找到Archives 3.选择下载的把版本 4.选择具体下载那个版本 5. 6.一般选择tar.gz结尾的压缩包...

领星ERP如何无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统
领星ERP(LINGXING)是一款专业的一站式亚马逊管理系统,帮助卖家构建完整的数据化运营闭环。,致力于为跨境电商卖家提供精细化运营和业财一体化的解决方案。 官网:https://erp.lingxing.com 集简云无代码集成平台&…...

Django实战项目-学习任务系统-自定义URL拦截器
接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。 首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题。 Django框架本身也有URL拦截器࿰…...