文章目录
前言
本篇记录内容比较杂,皆是学习过程中遇到的各种小问题。
一、相乘
<w,x> == torch.dot(w,x),内积
二、torch的某些用法
1.torch.reshape(1,1)
reshape(-1,1)中的-1代表无意义
reshape(-1,1)代表将二维数组重整为一个一列的二维数组
reshape(1,-1)代表将二维数组重整为一个一行的二维数组
reshape(-1,n)代表将二维数组重整为n列的二维数组
reshape(n,-1)代表将二维数组重整为n行的二维数组
2.torch.normal()
代码如下(示例):
X = torch.normal(0,1,(num_examples,len(w)))
X=torch.normal(mean=1,std=2,size=(3,4))
生成一个符合正态分布的张量,可以设置均值,标准差,形状
3.torch.matmal()
代码如下(示例):
y = torch.matmul(X,w) +b
多维矩阵相乘,如果是两个二维矩阵相乘就相当于torch.mm
三、定义data_iter()获取批次数据
1.random.shuffle()
把列表中的元素打乱顺序,但不会生成新的列表
2.yield
Python中的关键字,生成器,生成一个抛出来一个,相当于是一个return,但是return一出现他就停了,所以yield在这里可以一边执行一边往外抛出
3.代码
# 数据迭代器,取数据用
def data_iter(batch_size, features, labels):
num_examples = len(features)
#这里要把他变成列表是因为下面需要用函数打乱顺序
indices = list(range(num_examples))
# 这些样本是随机读取的,没有特定的顺序
random.shuffle(indices)
for i in range(0, num_examples, batch_size):
# batch_indices = torch.tensor(
# indices[i: min(i + batch_size, num_examples)])
# 这里可以看下面的例子
batch_indices = indices[i: min(i + batch_size, num_examples)]
# 生成器,生成一个抛出来一个,相当于是一个return,但是return一出现他就停了,所以yield在这里可以一边执行一边往外抛出
yield features[batch_indices], labels[batch_indices]
四、Python中的*
除了乘法这一用途外,*在Python中常被用于解包,具体用途如下
# 对*解包作用的实验
a = [1,2,3,4,5]
b = [6,7,8,9,0]
print((a,b))
print('-'*50)
print(*(a,b))
([1, 2, 3, 4, 5], [6, 7, 8, 9, 0])
--------------------------------------------------
[1, 2, 3, 4, 5] [6, 7, 8, 9, 0]
(a,b)将ab两个列表组成一个元组,而加上*可以将该元组拆成两个列表
五、TensorDataset&DataLoader
# TensorDataset:把输入的两类数据进行一 一对应;DataLoader:重新排序
dataset = data.TensorDataset(*data_array)
return data.DataLoader(dataset,batch_size,shuffle=is_Trian)