0.前置
镜像
- 清华:
https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里云:
http://mirrors.aliyun.com/pypi/simple/
- 中国科技大学:
https://pypi.mirrors.ustc.edu.cn/simple/
- 华中理工大学:
http://pypi.hustunique.com/
- 山东理工大学:
http://pypi.sdutlinux.org/
jupyter notebook
-
安装
pip install notebook -i https://pypi.tuna.tsinghua.edu.cn/simple
安装 jupyter notebook 后,还需要使用 ipykernel 生成虚拟环境的kernel(这一步也是在虚拟环境中进行)
python -m ipykernel install --user --name 环境名
-
jupyter 修改默认文件存储路径
更改Jupyter保存位置、路径详细步骤
临时修改
jupyter修改默认“文件存储路径”,使用这种方法,随时随地可修改
两个比较有用的函数工具
-
dir()
: 能让我们知道“工具箱”里有什么东西,dir 是 directory 的缩写.
每个对象都有不同的函数和常量。每个函数和常量都成为一个属性。dir()
的作用就是将这个对象中的所有属性显示出来,这些属性以列表的方式储存。 -
help()
: 查看帮助,让我们知晓“工具”的使用方法,所查询函数不加()
就足以得到一个简明的信息
三种方式比较
1. 加载数据
-
Dataset
from torch.utils.data import Dataset
utils : utilities
2. Tensorboard & Transforms
Tensorboard 测试
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("log") #写到log里,log为文件名
image_path = "dataset/train/ants/0013035.jpg" #相对路径
img = Image.open(image_path) #这里打开的是PIL.jpg 格式
img = np.array(img) #转成array
writer.add_image("image1", img, 1, dataformats='HWC') #参数可直接查看文档
for i in range(100):
writer.add_scalar("y = 3x", 3*i, i) #虽然是离散的,但好像会自动拟合
writer.close() #必写!关闭才能从缓存写入events文件(虽然不太懂其中实质)
Tensorboard 显示数据(array, tensor等形式)
在命令行(Pycharm 里可在Terminnal)输入
tensorboard --logdir=文件名 (--port=6007)
port 后面是端口,可以自己设定,默认好像是6006
Transforms 测试
import cv2
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
image_path = "dataset/train/ants/7759525_1363d24e88.jpg"
img_PIL = Image.open(image_path)
toTensor = transforms.ToTensor()
img_tensor = toTensor(img_PIL)
print(type(img_tensor))
img_array = cv2.imread(image_path)
print(type(img_array))
img_tensor2 = toTensor(img_array)
print(img_tensor2.shape)
writer = SummaryWriter("logs")
writer.add_image("img_tensor", img_tensor2)
writer.close()
3.CIFAR10加载及展示
import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter
dataset_transform = torchvision.transforms.Compose([
torchvision.transforms.ToTensor()
])
train_set = torchvision.datasets.CIFAR10(root="./CIFAR10", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./CIFAR10", train=False, transform=dataset_transform, download=True)
# 开始没对dataset 加transform的测试
# print(test_set[0])
# img, target = test_set[0]
#
# print(test_set.classes[target])
# print(type(img))
# #img.show()
writer = SummaryWriter("10p")
for i in range(10):
img, target = test_set[i]
writer.add_image(test_set.classes[target], img, i) # 默认是'CHW',恰好PIL.jpg转过来的也是'CxHxW'
# print(img.size())
writer.close()
关于dataset中的transform,看源代码就知道,是每取出一个就对这个作用一次,不是一次性作用在所有数据上。
4.DataLoader
import torchvision.datasets
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
test_data = torchvision.datasets.CIFAR10("CIFAR10", train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)
writer = SummaryWriter("test_dataloader")
test = 0
for epoch in range(2): # 跑一个epoch把数据集过一遍
step = 0
for data in dataloader: # dataloader是可迭代对象, 每次取出从中data, Nx(dataset中的数据形式)
imgs, targets = data
if test == 0:
print(imgs.shape) # 64x3x32x32
print(targets.shape) # 64(x1)
test = 1
writer.add_images("Epoch:{}".format(epoch), imgs, step)
step += 1
writer.close()
5. nn.Module
import torch
from torch import nn
class Mynet(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
output = x+1
return output
mynet = Mynet()
x = torch.tensor(1.0)
print(mynet(x))
to be continue...