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


#192

从迭代器里拿一个batch的数据


#193
if trainer is None:
    d2l.sgd(params, lr, batch_size)
else:
    trainer.step(batch_size)

在这个训练集(60000张图片) 上,因为 batch_size=256,最后一个batch不是只有96个样本吗?为什么使用的是统一的 batch_size 作为 trainer 的参数?是不是最好应该传入 y.size


#194


多谢 yyansheng 的详细解释。
如果按照 test acc 一样的方法计算 train data 上的精度,会发现还是在train data上的精度高。
不知道作者为啥对 train data 采用那种预测精度计算方法?


#195

因为X里面的数据太多拉,所以只打印了X的开头那一部分,对应图片的左上角。
再看看图片的左上角都是黑色的,所以像素值就是0.


#196

图片的784个像素 可以认为是 样本数据的784个维度。


#197

我也遇到这个问题了,attach_grad后面把括号()给丢了:joy:


#198

有个关于自动求导的问题

之前版主提到过,当x是向量或者矩阵的时候,x.backward()等价于x.sum().backward()

如果是这样的话,感觉上在训练模型中做如下改写,效果应该是一样的。但是实际运行中,这样的改写会出错。请问如何解释,谢谢
with autograd.record():
y_hat = net(X)
l = loss(y_hat, y) # 即把sum()去掉
l.backward()


#199

为什么loss function 有sum。 “l = loss(y_hat, y).sum()”


#200

subplots,不是subpolt


#201

路径不对,print一下path,看下SGD的路径在哪,重新append一下,或者把封装SGD的文件放到当前工作目录下


#202

为啥论坛显示不能按照时间或者热度来啊。


#203

老师您好

请问下,我运行到训练的环节,运行后就不响应了。把函数定义和最后一句分离开,发现函数定义没问题,还是实际运行的那一句卡主了,没有任何输出结果。

谢谢


#204

关于两个练习题,这个链接http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/讨论了softmax和cross entropy的数值稳定问题


#206

我的问题解决了,原来是mxnet安装的版本不对,要求的事1.4.0版,我通过anaconda搜索安装的是1.2.1版。后来通过控制台指定安装了1.4版就可以正常运行了。


#207

小白发问:
想问一下,在本章的jupyter 文档中,其余程序段运行都正常,但在最后进行预测的时候,界面突然开始乱码(如图),求问该如何解决


这是正常的界面(如图):
谢谢大家!


#208

更新:发现问题了,采用gluon虚拟环境就会出现这样的问题,感觉很奇怪,不采用gluon虚拟环境就可以正常显示图像。(还是不明白为什么)


#209

shirt识别率最低,其次是pullover


#210

有点好奇,一般这种sampleweight都是在很外层获取的(loss = _apply_weighting(F, loss, self._weight, sample_weight)),往往是个numpy array 或者 ndartay,anyway,总之想咨询个小问题,就是这种外部往往得到的numpy array怎么改成symbol呢?这个确实让我困惑了好久……


#211

我看见示例代码是默认cpu运算(即使安装了mxnet的GPU版本),我做了一点小修改,这样就可以在mxnet的GPU版本在GPU运算了

  1. 首先是初始化参数更改
W = nd.random.normal(scale=0.01, shape=(num_inputs, num_outputs),ctx=mx.gpu())
b = nd.zeros(num_outputs,ctx=mx.gpu())
  1. 然后是占位数据存储位置的修改
X = nd.array([[1, 2, 3], [4, 5, 6]],ctx=mx.gpu())
X = nd.random.normal(shape=(2, 5),ctx=mx.gpu())
y_hat = nd.array([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]],ctx=mx.gpu())
y = nd.array([0, 2], dtype='int32',ctx=mx.gpu())

3.最后是迭代器获取参数的修改

X=X.as_in_context(mx.gpu())
 y=y.as_in_context(mx.gpu())
 X=X.as_in_context(mx.gpu())
 y=y.as_in_context(mx.gpu())
pred_labels = d2l.get_fashion_mnist_labels(net(X.as_in_context(mx.gpu())).argmax(axis=1).as_in_context(mx.cpu()).asnumpy())

具体修改的位置,请自行对照,修改方式就这样,想好参数运行的位置就好了

然后运行结果
cpu:
cost time 5s,epoch 1,loss 0.5741,train acc 0.810,test acc 0.826
cost time 6s,epoch 2,loss 0.5297,train acc 0.823,test acc 0.832
cost time 7s,epoch 3,loss 0.5044,train acc 0.830,test acc 0.839
cost time 7s,epoch 4,loss 0.4891,train acc 0.834,test acc 0.840
cost time 7s,epoch 5,loss 0.4784,train acc 0.838,test acc 0.846

gpu:
cost time 4s,epoch 1,loss 0.7875,train acc 0.746,test acc 0.802
cost time 4s,epoch 2,loss 0.5739,train acc 0.811,test acc 0.821
cost time 4s,epoch 3,loss 0.5285,train acc 0.823,test acc 0.825
cost time 4s,epoch 4,loss 0.5050,train acc 0.829,test acc 0.838
cost time 4s,epoch 5,loss 0.4888,train acc 0.835,test acc 0.840

快了近一倍


#212

请问是如何指定安装新版本的呀