含并行连结的网络(GoogLeNet) 讨论区

http://zh.diveintodeeplearning.org/chapter_convolutional-neural-networks/googlenet.html

设计V2,加入batch Normalization时,我想问下,mxnet有可以直接输入data的batch norm函数吗?就发现一个mxnet.gluon.nn.BatchNorm(),但是不能输入data。

在Inception类的定义中return的nd.concat(), 是否有nn的函数可以取代concat,这样可以直接add到网络中?

x = nn.BatchNorm 然后x(data)

有是有,但暂时不在official的支持列表里。参考 https://github.com/apache/incubator-mxnet/blob/master/python/mxnet/gluon/model_zoo/vision/inception.py

在设计v2时,其实并不需要nn.BatchNorm(data)这个函数,只需要将conv_函数改为nn.Sequential()就行。v2比v1收敛更快,准确率也更高,真是个神器。谢谢沐神的回复。

1赞

定义googlenet类中
with self.name_scope():
# block 1
b1 = nn.Sequential()
b1.add(
nn.Conv2D(64, kernel_size=7, strides=2,
padding=3, activation=‘relu’),
nn.MaxPool2D(pool_size=3, strides=2)
)
kernel_size应该是10吧,7的话是不能被整除的。
另外,建议教程中加入模块图,比如Residual块图,谢谢大牛们的分享。

为什么我在windows上跑老是报错:
TypeError Traceback (most recent call last)
in ()
----> 1 net = GoogLeNet(10, verbose=True)
2 net.initialize()
3
4 x = nd.random.uniform(shape=(4, 3, 96, 96))
5 y = net(x)

in init(self, num_classes, verbose, **kwargs)
41 nn.Conv2D(64, kernel_size=7, strides=2,
42 padding=3, activation=‘relu’),
—> 43 nn.MaxPool2D(pool_size=3, strides=2)
44 )
45 # block 2

TypeError: add() takes 2 positional arguments but 3 were given

是这里参数多了吗?
self.net.add(b1, b2, b3, b4, b5, b6)

这个是mxnet不够新,需要更新了
更新方法在 http://zh.gluon.ai/chapter_prerequisite/install.html 里的 更新教程 章节

各位小伙伴,向大家请教一下,GoogLeNet Inception中padding是根据什么来设置的。

为了保证图片经过每个 path 后的宽高不变设置的

原论文中是7

MemoryError Traceback (most recent call last)
in ()
16 ‘sgd’, {‘learning_rate’: 0.01})
17 utils.train(train_data, test_data, net, loss,
—> 18 trainer, ctx, num_epochs=10)

G:\gluon_jupyternotebook\utils.py in train(train_data, test_data, net, loss, trainer, ctx, num_epochs, print_batches)
124 train_data.reset()
125 start = time()
–> 126 for i, batch in enumerate(train_data):
127 data, label, batch_size = _get_batch(batch, ctx)
128 losses = []

G:\gluon_jupyternotebook\utils.py in iter(self)
30 idx = np.arange(n)
31 np.random.shuffle(idx)
—> 32 X = nd.array(X.asnumpy()[idx])
33 y = nd.array(y.asnumpy()[idx])
34

G:\Anaconda3-5.0.1\lib\site-packages\mxnet\ndarray\ndarray.py in asnumpy(self)
1795 [1, 1, 1]], dtype=int32)
1796 “”"
-> 1797 data = np.empty(self.shape, dtype=self.dtype)
1798 check_call(_LIB.MXNDArraySyncCopyToCPU(
1799 self.handle,

MemoryError:

windows上跑的,更新了mxnet cuda80 也更新了gluon 但是一直还是出错,在pycharm和jupyter上跑也是出错就训练了一轮就报错了,实在不知道怎么回事,显卡是1070ti的显存8G跑程序的时候也没跑满,显卡利用率也很低。内存用了10g左右。不知道是什么情况。是我内存不够大???

请问改成V2具体是如何将con_改成nn.Sequential()???

是为了保持输入输出尺寸一致设置的
比如说我输入64x64给一个5x5的卷积,没有padding的话卷积结果将是60x60
如果添加padding=2两侧各外扩两格则可以得到64x64

Incenption里面要把几个卷积后的结果按层Concat起来,每层的卷积输出尺寸需要是一致的
所以设计了这几个padding保证卷积核尺寸不一样的时候输出还可以与输入尺寸相同

这一章里有一处小错误:
虽然BN对于Inception提升很大,但并不是inception-V2
V2和V3是在同一篇文章里提出的两个版本(rethinking 那一篇)

代码没敲错 为什么运行报错?

请问一下,googlenet的inception b3结构当中且第2,第3线路先分别将输入通道减少2倍和12倍进入第二层卷积层是什么意思呢?