从0开始的卷积神经网络 讨论区


#23

import sys
sys.path.append(’…’)
from utils import load_data_fashion_mnist

batch_size = 256
train_data, test_data = load_data_fashion_mnist(batch_size)

报错:
File “test2.py”, line 17, in
from utils import load_data_fashion_mnist
ImportError: cannot import name load_data_fashion_mnist

求指导


#24

fashion_mnist没下载好吧


#25

第一个框里 out = nd.Convolution(data, w, b, kernel=w.shape[2:], num_filter=w.shape[1])
第二个框里 out = nd.Convolution(data, w, b, kernel=w.shape[2:], num_filter=w.shape[1], stride=(2,2), pad=(1,1))
第三个框里 out = nd.Convolution(data, w, b, kernel=w.shape[2:], num_filter=w.shape[0])
第三个框里 out = nd.Convolution(data, w, b, kernel=w.shape[2:], num_filter=w.shape[0])

num_filter而论,有点懵圈,感觉前两个框里 也应该是w.shape[0]吧?


#26

这里的确是误导了,全部都是w.shape[0]

至于为啥前两个num_filter=w.shape[1]。。。

只是因为w.shape[1] == w.shape[0] == 1.:joy:


#27

正解,另外这个num_fileter名字感觉很不直观,明明表达的是输出channel的个数,用这个名字感觉有点不知其意


#28

这是我在卷积神经网络的帖子


这里的
weight: (num_filter, channel, kernel[0], kernel[1])

num_filter指的是卷积核的套数(我习惯叫套数,而不是个数 :joy:),它对应的是output_channels,也就是咱们转换后的channel数(与weight第二个张量channel不同),也可以理解成生成的feature map的个数。

我这是自我再回顾回顾哈,说得有不对的地方,再多多指正!


#29

赞同,另外再次感谢木神以及社区的小伙伴,氛围真的很棒


#30

刚想上来说这个问题呢,发现已经有了。


#31


test_acc = evaluate_accuracy(test_data,net,ctx)
print(“Epoch: %d,loss:%f,train_acc:%f,test_acc:%f”%(
epoch,train_loss/len(train_data),train_acc/len(train_data),test_acc))
本节最后的训练代码中,可以看到test_data,train_data都是用load_data_fashionmnist()下载的,为何在使用时,train_data 每次导入batch_size个数据,test_data不是,查看了gluon.data.vision.FashionMNIST和gluon.data.DataLoader没有发现代码上具体是怎么实现的,本身数据就是这么存储的?这个数据导入过程的逻辑是什么样的呢?


#32

请问这个要怎么改


#33

有个疑问,请各位解答一下。
第二层卷积的时候,输入有20个通道,输出有50个通道。所以这个地方有50个filter,每一个filter都会去和前面20个通道卷积,卷出来的结果求和,且这一个filter在卷20个通道时是共享参数的。请问这样理解对吗?


#34

有个疑问,普通的n×m 和 m×k 的矩阵乘法需要浮点运算不是mnk + (m - 1)nk = 2mnk - nk次吗?为什么说是2mnk次呢?


#35

test_data也是,你看看evaluate_accuracy这个函数就知道啦


#36

哈哈,就是为了计算简单。准确是要减去边缘的加法。


#37

没在你源码里看到哪里有这个地方可以改reshape


#38

image

老师,您好!这里的训练结果好奇怪呀!每个迭代过程中,都是训练精度,小于test集的精度。
这个,不应该是反过来的吗?


#39
for data, _ in train_data:
    net(data, verbose=True)
    break

这里的下划线是什么呢?


#40

不一定吧,有时候training的augmentation加得多(噪音多),而test加的少,所以经常test acc更好


#41

有道理,多谢沐神


#42

老师,你好! 我想藉着yjfdl123 这图片请教一个问题,为什么迭代精度在 Epoch0 至 Epoch1中有一个很大的跳跃,这现象好像在之前的感知器或线性回归中是没有出现的,请指教,谢谢~