我是mxnet的新手,我正在尝试执行以下代码:
from mxnet import nd, sym
from mxnet.gluon import nn
class HybridNet(nn.HybridBlock):
def __init__(self, **kwargs):
super(HybridNet, self).__init__(**kwargs)
self.hidden = nn.Dense(10)
self.output = nn.Dense(2)
def hybrid_forward(self, F, x):
print('F: ', F)
print('x: ', x.shape)
x = F.relu(self.hidden(x))
print('hidden: ', x.shape)
x = F.relu(self.hidden(x))
print('hidden: ', x.shape)
return self.output(x)
net = HybridNet()
net.initialize()
x = nd.random.normal(shape=(1, 4))
net(x)
但是,出现此错误: MXNetError:形状不一致,提供= [10,4],推断的形状=(10,10)
但是如果我将self.hidden = nn.Dense(10)更改为self.hidden = nn.Dense(4),该错误将不再存在。 但我不明白为什么,有人可以向我解释一下吗? 谢谢
答案 0 :(得分:0)
问题是您用不同的输入大小重复使用了相同的隐藏层两次。
x = F.relu(self.hidden(x))
时,隐藏层会自动由于输入x = nd.random.normal(shape=(1, 4))
而发现输入大小为4。 要解决此问题,请引入另一个任意大小的隐藏层:
from mxnet import nd, sym
from mxnet.gluon import nn
class HybridNet(nn.HybridBlock):
def __init__(self, **kwargs):
super(HybridNet, self).__init__(**kwargs)
self.hidden1 = nn.Dense(10)
self.hidden2 = nn.Dense(20)
self.output = nn.Dense(2)
def hybrid_forward(self, F, x):
print('F: ', F)
print('x: ', x.shape)
x = F.relu(self.hidden1(x))
print('hidden: ', x.shape)
x = F.relu(self.hidden2(x))
print('hidden: ', x.shape)
return self.output(x)
net = HybridNet()
net.initialize()
x = nd.random.normal(shape=(1, 4))
net(x)