首页 > 其他分享 >Gluon

Gluon

时间:2023-08-06 12:46:48浏览次数:23  
标签:Dense nn self add Gluon net Block

# 灵活运用gluon实现神经网络

from mxnet import nd
from mxnet.gluon import nn

net = nn.Sequential()

# net.name_scope()创建了一个名为net的命名空间,所有在with语句块中添加到net中的层都会包含在这个命名空间中
# 这样,可以确保所有这些层都以net.作为前缀,从而帮助组织这些层并将它们与其他命名空间中的层区分开来。
# 系统会自动帮我们添加前缀,导致这个网络变得独一无二,以防出现误差

with net.name_scope():
    net.add(nn.Dense(256, activation='relu'))
    net.add(nn.Dense(10))

print(net)


# 使用 block定义


class MLP(nn.Block):
    def __init__(self, **kwargs):
        super(MLP, self).__init__(**kwargs)
        with self.name_scope():
            self.dense0 = nn.Dense(256)
            self.dense1 = nn.Dense(10)

    def forward(self, x):
        return self.dense1(nd.relu(self.dense0(x)))


net2 = MLP()
print(net2)
net2.initialize()

x = nd.random_uniform(shape=(4, 20))
y = net2(x)
print(y)


# nnBlock到底是什么东西?
# 在gluon 里,nn.Block 是一个一般化的部件。整个神经网络可以是一个nn.Block,单个层也是一个nn.Block。
# 我们可以 (近似)无限地嵌套 nnBlock 来构建新的 nn.Block。
# nnBlock主要提供这个东西
# 1.储存参数
# 2.描述forward如何执行
# 3.自动求导

# nn.Sequential 是一个nn.Block 容器,它通过 add 来添加 nn.Block 。
# 它自动生成forward()函数,其就是把加进来的 nn.Block 逐一运行。

# 嵌套使用

class RecMLP(nn.Block):
    def __init__(self, **kwargs):
        super(RecMLP, self).__init__(**kwargs)
        self.net = nn.Sequential()
        with self.name_scope():
            self.net.add(nn.Dense(256, activation='relu'))
            self.net.add(nn.Dense(128, activation='relu'))
            self.dense = nn.Dense(64)

    def forward(self, x):
        return nd.relu(self.dense(self.net(x)))


rec_mlp = nn.Sequential()
rec_mlp.add(RecMLP())
rec_mlp.add(nn.Dense(10))
print(rec_mlp)

 

标签:Dense,nn,self,add,Gluon,net,Block
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17609290.html

相关文章

  • gluon 基于浏览器+nodejs 的桌面应用开发框架
    gluon基于浏览器+nodejs的桌面应用开发框架,好处是相对轻量,只使用系统浏览器,对于nodejs可以支持包含以及不包含模式目前支持chrome以及firfox浏览器器,打包的应用相对比......