1. transforms
(1)ToTensor:
将PIL或ndarray图片转化为tensor. ndarray in (H x W x C) in the range [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0]
(2).Lambda transform:
使用Lambda class wrapping any function to transform
from torchvision.transforms import ToTensor, Lambda
target_transform = Lambda(lambda y: torch.zeros( 10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))
2.model
(1)model device
device=(
"cuda"
if torch.cuda.is_available()
else "mps"
if torch.backends.mps.is_available()
else "cpu"
)
(2) define class
class NeuralNetwork(nn.Module):
def __init__(self):#初始化模块
super().__init__()#调用父类nn.Module的初始化函数
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(
nn.Linear(28*28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10),
)
def forward(self, x):#数据操作
x = self.flatten(x)#转化为一维数据
logits = self.linear_relu_stack(x)
return logits
(3)创建实例,把模型移动到device
Model=NeuralNetwork().to(device)
print(model)
(4)输出结果
x=torch.rand(1,28,28,device)
logits=model(x)
predict_probilities=nn.Softmax(dim=1)(logits)
y_predicted=predict_probabilities.argmax(axis=1)
(5) model layers
a. 查看
可以通过直接打印模型查看模型结构,
或打印模型输出尺寸,
或打印利用model.named_parameters()打印层名称及参数迭代器
for name, param in model.named_parameters():
print(f"name{name}|parameter size{param.size()}|Values param[:2]")
b.nn.Sequential
是模型模块的有序容器,如果数据总是按照相同的顺序输入模块,则可使用
c.nn.ReLU
用在线性模块之间,增加模型的非线性。
d.nn.Linear
(wieght and bias)
e.nn.Softmax(dim)(input)
把输入映射到0-1区间,并且所有概率之和为1.
f.nn.Flatten
dim=0 的数值为minibatch的维度保留,其他压缩为1d。
-----
1.numpy argmax(axis)
返回ndarray中最大值的下标,如果参数axis给出,则在特定方向上运行该函数。
3. torch rand(size)
输出【0,1)区间,满足size