策略网络(演员)
class Actor
Q-网络(评论家)
class QCritic
张量 Tensor
Tensor张量 ,在PyTorch中用于存储基本数据。
张量表示多维数组。
零维张量表示标量;
一维张量表示向量;
二维张量表示矩阵;
多维张量表示多维数组。
1.Tensor cuda的转换
torch.cuda.is_available()判断是否支持GPU,将Tensor a 放入GPU 只需a.cuda().
ex.
if torch.cuda.is_available():
a_cuda=a.cuda()
print(a_cudda)
2.squeeze/unsqueeze;
squeeze用来压缩维度为1的Tensor;unsqueeze则用来增加一个维度。
3.自动梯度计算
PytTorch里面有一个NumPy中没有的概念——Variable(变量),这是神经网络计算图中特有的概念。
New一个 Variable对象v,它由data,grad以及grad_fn三部分组成。
v.data用于存储Variable中的Tensor数值;
v.grad也是一个Variable对象,用于存储Variable的反向传播梯度,用v.grad.data来访问;
v.grad_fn,可以用来得到Variable的操作,给出如何得到的操作算子。
4.模型的搭建
(1)torch.nn.Squential 序列容器,可以构建序列化模型
(2)torch.nn.Module 自定义模型类,继承torch.nn.Module
至少需要重写两个函数①__init__②forward
5.模型的保存与重载
模型的保存-两种方式:
(1)全部保存,保存整个模型的结构信息和参数信息,保存的对象是整个模型。
torch.save(model,‘/model.pkl’)
(2)只保存训练后的模型参数,保存的对象是模型的状态。
torch.save(model_state_dict(),‘./model_state_dict.pkl’)
模型的加载-两种方式:与保存的两种方式相对应
(1)全部保存则全部加载。则需要重新加载网络。
load_model=torch.load(‘./model.pkl’)
(2)由于保存训练后的模型参数,需要自己 导入或者搭建好与保存模型相同的神经网络结构。
使用model.load_state_dict()来导入模型的参数信息。
load_model=torch.load(‘./model_state_dict.pkl’)
总结:第一种全部保存方式在重载较大的网络时,通常时间比较长,存储所需要的空间也比较大。
因此,当网络较大时,通常使用第二种方式来保存模型和加载模型。
注意
(1)在Pytorch中通过网络传递NumPy数组之前将他们转换为torch张量;而在Tensorflow2.0中,可以直接将NumPy数组传递给模型。
Tensor可以在GPU上运行,而Numpy智能在CPU上运行。
(2)PyTorch创建的是静态图,Tensorflow创建的是动态图。具体来说,Tensorflow在定义模型的整个计算图之后才开始运行机器学习模型,而PyTorch的计算图在运行时创建的,可以随时定义、随时更改、随时执行节点。
(3)Tensorflow的学习曲线要比PyTorch陡峭得多。