softmax 回归的从零开始实现 讨论区


#62

哦哦,那更新的话,之前有的函数岂不是需要重新设置了?还是说包含之前的功能,不用动的?另外如果更新这么快的话,本地的mxnet版本是不是也要跟着更新,然后用master最新的进行查询相关函数用法(小白捂脸)?


#63

我们基本上都会保持向后兼容


#64

哦哦,谢谢


#65

请问为什么训练初期测试集的准确率略高于训练集呢


#66


不理解,文档中SoftmaxCrossEntropy中该公式的描述,label的下标应该是 ij 吧?


#68

ImportError Traceback (most recent call last)
in ()
2 import sys
3 sys.path.append(’…’)
----> 4 from utils import SGD
5 from mxnet import autograd
6

ImportError: cannot import name ‘SGD’

为什么没有SGD,不懂


#69

在utils里 需要自己引进来
把上个搬过来也行


#70

好的,解决了,谢谢您
最近使用jupyter notebook每运行到train的部分,就出现kernel died然后就是自动重启,以前好的程序也是这样的问题,不懂是什么原因,如果您知道的话,真的非常感谢您的解答


#71

@free_slam_dunk @sunnygirl 看到没有人很好的回答这个问题,还有人从训练集与测试集的期望误差来分析。实际上没有这么复杂, 我来解释一下。

注意训练误差train_acc的计算是在每个epoch的每个batch中计算然后求平均。 而测试误差是在每个epoch结束后再计算的,显然,测试误差计算的时候 模型都效果都是好于train_acc每次计算,因为经历完了一个epoch所有样本的更新。


从0开始的多类逻辑回归
#74

交叉熵是用来量化你预测的随机分布和真实的随机分布的差距。你的目标是要缩小这个差距。交叉熵就提供了这么一个可以用来具体衡量的数值。
@Bigboy


#75

关于练习题的疑问。

我把学习率从0.1调整到1后发现:

loss是nan, output到最后是nan

进一步我跟踪了一下,最开始出现nan的地方,找到更新bias时,bias的grad是nan!

看了一下,pluskid的blog, 文章中提到, 把softmax和交叉熵分层会导致计算出现一个中间项1/oy, oy非常小时(使得1/oy超出float精度),会出现nan(numerical stability), 解决办法是在计算exp之前,把每行数据减去该行的最大值,这样求exp时,最大值是0, 不会溢出。

我尝试了一下,在softmax下添加了一行

X = X - X.max(axis=1).reshape((X.shape[0], -1))

再运行,求出来的grad还是不稳定。。

求进一步解释


#76

同求,也一直不理解


#77


请问这个问题怎么解决


#78

没看懂楼主什么错误, 不过建议楼主把文件名 路径名什么的换成英文.


#79

将代码写成一个单独的python sample.py文件,在cmd命令行中执行 python sample.py 。运行过程中,y = true_w[0] * X[:,0] + true_w[1] * X[:,1] + true_b,这一句报错。
y = true_w[0] * X[:,0] + true_w[1] * X[:,1] + true_b
IndexError: list index out of range

将 true_w = [2 -3.4] 修改为 true_w = nd.array([2 -3.4]),执行报错
y = true_w[0] * X[:,0] + true_w[1] * X[:,1] + true_b
File “F:\Engineering\Anaconda3\envs\gluon\lib\site-packages\mxnet\ndarray\ndarray.py”, line 499, in getitem
return self._get_nd_basic_indexing(key)
File “F:\Engineering\Anaconda3\envs\gluon\lib\site-packages\mxnet\ndarray\ndarray.py”, line 766, in _get_nd_basic_indexing
key, shape[0]))
IndexError: index 1 is out of bounds for axis 0 with size 1

将 y 改为 y= true_w[0].asscalar * X[:,0] + true_w[1].asscalar * X[:,1] + true_b
y = true_w[0].asscalar * X[:,0] + true_w[1].asscalar * X[:,1] + true_b
File “F:\Engineering\Anaconda3\envs\gluon\lib\site-packages\mxnet\ndarray\ndarray.py”, line 253, in rmul
return self.mul(other)
File “F:\Engineering\Anaconda3\envs\gluon\lib\site-packages\mxnet\ndarray\ndarray.py”, line 235, in mul
return multiply(self, other)
File “F:\Engineering\Anaconda3\envs\gluon\lib\site-packages\mxnet\ndarray\ndarray.py”, line 2566, in multiply
None)
File “F:\Engineering\Anaconda3\envs\gluon\lib\site-packages\mxnet\ndarray\ndarray.py”, line 2381, in _ufunc_helper
raise TypeError(‘type %s not supported’ % str(type(rhs)))
TypeError: type <class ‘method’> not supported

还请,指导一下该如何修改,在单独py文件中可以执行。


#80

用jupyter打开后,可以选下载成.py文件吧


#81

出错的原因
true_w = nd.array([2 -3.4])
应该为
true_w = nd.array([2, -3.4])


#82

def transform(data, label):
return data.astype(‘float32’)/255, label.astype(‘float32’)

请问大神们,为什么要除以255,课上讲的那句回放了好几遍,可还是理解不了。


#83

train_loss += nd.mean(loss).asscalar()
求问,为什么这里要求平均~


#84

loss是(256, ) 的矩阵,对应每个batch_size每个样本的cross_entropy,这里做平均,相当于求每个batch,这样的训练对应的loss