最优化
最优化的目标:找到能够使损失函数值最小化的一系列权重w
随机初始化
import torch
from torch.utils.data import DataLoader
import torchvision.datasets as dsets
import torchvision.transforms as transforms
import numpy as np
class_num = 10
batch_size = 4
label = torch.LongTensor(batch_size, 1).random_() % class_num
print(label)
# 把Tensor转换成one_hot scatter_(1,label,1) 表示拿1根据label矩阵来对zeros矩阵进行列填充
ont_hot = torch.zeros(batch_size,class_num).scatter_(1,label,1)
print('---')
print(ont_hot)
梯度下降法
代码实现如下:
def gradient_descent(f, init_X,lr=0.01,step_num=100):
x = init_X
for i in range(step_num):
grad = numberical_gradient(f,x)
x =-= lr*grad
return x
参数f是要进行最优化的函数,init_x是初始值,lr表示学习率,step_num代表梯度下降法的重复数
补充概念:Np.nditer
代码如下:
import numpy as np
arr1 = np.arange(0,30,5).reshape(2,3)
it = np.nditer(arr1, flags=['multi_index'], op_flags=['readwrite'])
while not it.finished:
print(it.multi_index)
it.iternext()
运行结果:
op_flags=['readwrite'] 表示不仅可以对a进行读取,还可以进行写入
print(it.multi_index) 表示输出元素的索引
it.iternext() 表示进入下一次迭代