首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建LeNet 10神经网络

创建LeNet 10神经网络
EN

Stack Overflow用户
提问于 2021-02-05 05:23:00
回答 1查看 69关注 0票数 1

我正在尝试使用Gluon API在MXNet中编写一个训练循环,并编写一个验证循环来评估一个训练过的网络。

我目前正在尝试定义一个网络。我需要定义一个基于LeNet架构的网络,而不是原始MNIST数据的10个输出层,我应该有2个输出层。

我真的不知道该怎么做。我尝试在创建网络时包含Flatten和Dense,但是我得到了下面的错误。是否与Conv2D和MaxPool2D层中的某些设置有关?

编辑:在更多地摆弄它之后,我现在认为它与损失函数有关……

代码语言:javascript
复制
def get_network():
    """
    Should create the LeNet 10 network but with 2 output units instead of 10 and return a classification loss function
    
    :return: the network and the loss function
    :rtype: (gluon.Block, gluon.Block)
    """
    
    net = None
    loss_fn = None
    
    # create a network
    net = nn.Sequential()
    
    net.add(
        nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
        nn.MaxPool2D(pool_size=2, strides=2),
        nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
        nn.MaxPool2D(pool_size=2, strides=2)  
    )
    
    net.initialize(init=init.Xavier())
    
    # choose and set loss_fn for a classification task
    loss_fn = gluon.loss.SoftmaxCrossEntropyLoss()
    
    return net, loss_fn
代码语言:javascript
复制
n, loss_fn = get_network()

assert isinstance(n[0], nn.Conv2D)
assert isinstance(n[2], nn.Conv2D)
assert isinstance(n[1], nn.MaxPool2D)
assert isinstance(n[3], nn.MaxPool2D)

for l in n[-3:]:
    assert isinstance(l, nn.Dense)

我得到以下错误:

代码语言:javascript
复制
AssertionError                            Traceback (most recent call last)
<ipython-input-29-e1d75f4e8660> in <module>
      7 
      8 for l in n[-3:]:
----> 9     assert isinstance(l, nn.Dense)

AssertionError:
EN

回答 1

Stack Overflow用户

发布于 2021-02-05 10:44:11

你应该为模型添加3个密集层,下面的代码运行时不会有任何错误:

代码语言:javascript
复制
from mxnet import init, gluon
from mxnet.gluon import nn

def get_network():
    """
    Should create the LeNet 10 network but with 2 output units instead of 10 and return a classification loss function
    
    :return: the network and the loss function
    :rtype: (gluon.Block, gluon.Block)
    """
    
    net = None
    loss_fn = None
    
    # create a network
    net = nn.Sequential()

    net.add(
      nn.Conv2D(channels=6,kernel_size=5,activation='relu'),
      nn.MaxPool2D(pool_size=2,strides=2),
      nn.Conv2D(channels=16,kernel_size=3,activation='relu'),
      nn.MaxPool2D(pool_size=2,strides=2),
      nn.Dense(120, activation='relu'),
      nn.Dense(84, activation='relu'),
      nn.Dense(2))
    
    net.initialize(init=init.Xavier())
    
    # choose and set loss_fn for a classification task
    loss_fn = gluon.loss.SoftmaxCrossEntropyLoss()
    
    return net, loss_fn

n, loss_fn = get_network()

assert isinstance(n[0], nn.Conv2D)
assert isinstance(n[2], nn.Conv2D)
assert isinstance(n[1], nn.MaxPool2D)
assert isinstance(n[3], nn.MaxPool2D)

for l in n[-3:]:
    assert isinstance(l, nn.Dense)

此外,here是使用FashionMNIST训练LeNet的示例代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66053992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档