如何修复此错误:“MXNetError:Shape inconsistent,Provided”

2024-09-30 04:29:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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)

但如果我改变了自我隐藏= nn.密集型(10) 至自我隐藏= nn.密集型(4) ,错误将不再存在。 但我不明白为什么,有人能向我解释吗? 谢谢


Tags: fromimportselfnetinitdefnnmxnet
1条回答
网友
1楼 · 发布于 2024-09-30 04:29:02

问题是使用不同大小的输入重复使用同一个隐藏层两次。你知道吗

  1. 当您第一次调用x = F.relu(self.hidden(x))时,隐藏层会自动发现您的输入大小是4,因为您的输入:x = nd.random.normal(shape=(1, 4))。你知道吗
  2. 它输出大小为10的数组(因为有10个神经元)。你知道吗
  3. 然后再次使用隐藏层,但现在输入大小为10。。。该层已经初始化,并期望接收大小为4的输入,但得到大小为10的输入,因此失败。你知道吗

要解决此问题,请引入另一个任意大小的隐藏层:

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)

相关问题 更多 >

    热门问题