<p>这里的问题是,numpy输入使用<code>double</code>作为数据类型相同的数据类型也应用于结果张量。在</p>
<p>另一方面,<code>self.fully_connected</code>层的<code>weights</code>是{<cd4>}。当通过层传送数据时,应用矩阵乘法,这种乘法要求两个矩阵具有相同的数据类型。在</p>
<p><strong>所以你有两个解决方案:</strong></p>
<ul>
<li><strong>您可以将输入转换为float:</strong></li>
</ul>
<p><em>通过改变:</em></p>
<pre><code>gen(torch.from_numpy(np.random.normal(size=100)))
</code></pre>
<p><em>收件人:</em></p>
^{pr2}$
<p>输入到<code>gen</code>的输入将被转换为<code>float</code>。在</p>
<p><em>转换输入的完整工作代码:</em></p>
<pre><code>from torch import nn
import torch
import numpy as np
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.fully_connected = nn.Linear(100, 1024*4*4, bias=False)
def forward(self, zvec):
print(zvec.size())
fc = self.fully_connected(zvec)
return(fc.size())
gen = Generator();
gen(torch.from_numpy(np.random.normal(size=100)).float()) # converting network input to float
</code></pre>
<hr/>
<ul>
<li><strong>或者您也可以将层权重转换为两倍:</strong></li>
</ul>
<p>如果您需要双精度</em>,还可以将<code>weights</code>转换为<code>double</code>。在</p>
<p><em>更改此行:</em></p>
<pre><code>self.fully_connected = nn.Linear(100, 1024*4*4, bias=False)
</code></pre>
<p><em>只是为了:</em></p>
<pre><code>self.fully_connected = nn.Linear(100, 1024*4*4, bias=False).double()
</code></pre>
<p><em>转换权重的完整工作代码:</em></p>
<pre><code>from torch import nn
import torch
import numpy as np
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.fully_connected = nn.Linear(100, 1024*4*4, bias=False).double() # converting layer weights to double()
def forward(self, zvec):
print(zvec.size())
fc = self.fully_connected(zvec)
return(fc.size())
gen = Generator();
gen(torch.from_numpy(np.random.normal(size=100)))
</code></pre>
<hr/>
<p>因此,这两种方法都对您有效,但是如果您不需要<code>double</code>的额外精度,您应该使用<code>float</code>,因为{<cd1>}需要更多的计算能力。在</p>