一直有一个疑问,我们生成一个模型,这个模型的参数传递给了优化器,优化器在优化的时候,模型的参数会有变化,这之间的关联到底是怎样的呢?如果想改变模型的参数,只能通过优化器更新吗?如果在优化器外面更新了,这个时候的参数会在模型中、优化器中同时起作用吗?答案是会的,因为我们传递给优化器的模型参数包括了模型参数的地址,我们在这个地址上进行更改,则全局都会同步产生变化。
其实我要解决的一个问题就是,我想在优化器对模型进行更新的情况下,我自己也对模型增加一个更新。下面是我的代码:
程序运行结果为:
实验结果表明,往params这个字典中传递模型参数,以及将params传递给优化器的时候,传递的都是内存地址,因此只要在这个地址上进行数据更新,则全局都会进行更新,那么如何更新模型中的某个参数呢?如下所示,我要在每次进行forward()之前,将线性分类层的每个向量都进行标准化,则可以进行下面的操作:
这里要注意一下,如果是将2048维的特征向量,分类乘1000份,则分类层的tensor的尺寸是[1000,2048],而不是[2048,1000],这块要注意一下。
?
?
?