Pytorch基本变量类型FloatTensor与Variable用法
pytorch中基本的变量类型当属FloatTensor(以下都用floattensor),而Variable(以下都用variable)是floattensor的封装,除了包含floattensor还包含有梯度信息
pytorch中的dochi给出一些对于floattensor的基本的操作,比如四则运算以及平方等(链接),这些操作对于floattensor是十分的不友好,有时候需要写一个正则化的项需要写很长的一串,比如两个floattensor之间的相加需要用torch.add()来实现
然而正确的打开方式并不是这样
韩国一位大神写了一个pytorch的turorial,其中包含styletransfer的一个代码实现
forstepinrange(config.total_step): #Extractmultiple(5)convfeaturevectors target_features=vgg(target)#每一次输入到网络中的是同样一张图片,反传优化的目标是输入的target content_features=vgg(Variable(content)) style_features=vgg(Variable(style)) style_loss=0 content_loss=0 forf1,f2,f3inzip(target_features,content_features,style_features): #Computecontentloss(targetandcontentimage) content_loss+=torch.mean((f1-f2)**2)#square可以进行直接加-操作?可以,并且mean对所有的元素进行均值化造作 #Reshapeconvfeatures _,c,h,w=f1.size()#channelheightwidth f1=f1.view(c,h*w)#reshapeavector f3=f3.view(c,h*w)#reshapeavector #Computegrammatrix f1=torch.mm(f1,f1.t()) f3=torch.mm(f3,f3.t()) #Computestyleloss(targetandstyleimage) style_loss+=torch.mean((f1-f3)**2)/(c*h*w)#总共元素的数目?
其中f1与f2,f3的变量类型是Variable,作者对其直接用四则运算符进行加减,并且用python内置的**进行平方操作,然后
#-*-coding:utf-8-*- importtorch fromtorch.autogradimportVariable #dtype=torch.FloatTensor dtype=torch.cuda.FloatTensor#UncommentthistorunonGPU #Nisbatchsize;D_inisinputdimension; #Hishiddendimension;D_outisoutputdimension. N,D_in,H,D_out=64,1000,100,10 #Randomlyinitializeweights w1=torch.randn(D_in,H).type(dtype)#两个权重矩阵 w2=torch.randn(D_in,H).type(dtype) #operatewith+-*/and** w3=w1-2*w2 w4=w3**2 w5=w4/w1 #operatetheVariablewith+-*/and** w6=Variable(torch.randn(N,D_in).type(dtype)) w7=Variable(torch.randn(N,D_in).type(dtype)) w8=w6+w7 w9=w6*w7 w10=w9**2 print(1)
基本上调试的结果与预期相符
所以,对于floattensor以及variable进行普通的+-×/以及**没毛病
以上这篇Pytorch基本变量类型FloatTensor与Variable用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。