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


于置顶 #22

#23

好的,谢谢!


#24

这里的意思是说,因为模型最初的参数是随机初始化的,那么第一次对分类结果的预测就是完全随机的。比如这里num_outputs =10,也就是一共10类,那你随机猜一下,精度(或者说准确度)可不就是1/10嘛


#25

@zhaoxintao @szha 谢谢你们的详细的回复 终于理解了 这个复杂的操作:joy:


#26

这个例子用到了nd.pick
https://mxnet.incubator.apache.org/api/python/ndarray.html?highlight=pick#mxnet.ndarray.pick
文档里写的默认值是default=‘None’,如果是None的话应该没法运行吧,必须有个axis,实测的结果default应该是1


#27
    for data, label in train_data:
    with ag.record():
        output = net(data)
        loss = cross_entropy(output, label)
        cost = nd.mean(loss)
    cost.backward()
    # 不存在平均的问题
    SGD(params, learning_rate)

直接optimize的应该是个标量而不是数组 (loss),只不过自动求和了。避免了divide learning_rate,这里实际learning rate就是开始设定的那么多,感觉这样是不是更清楚一些


#28

这样写没有违和感

是1,文档生成的参数有点不对


#29

image
总是会报这样的错


#30

需要更新一下package。试试pip install -U --pre mxnet


#31

这句执行之后,import mxnet都有问题了


#32

要确保执行的pip是跟你用的ipython是用同一个python site packages的。不清楚的话建议都用conda environment里的pip


#33

In [9]: def net(X):
return softmax(nd.dot(X.reshape((-1,num_inputs)), W) + b)

这里-1换成batch_size会报错,是有些数据块越界了?


#34

因为最后一组大小小于batch_size啊


#35

嗯,现在仔细过一遍,看到你的帖子,赞一个。亲测nd.pick(data,index,axis).这里的axis的确默认为1,按行搜索。

cost = nd.mean(loss)

的确比在loss.backward()里将loss求和再求导要明确简洁点。


#36

有谁知道utils这个类在mxnet的哪个地方,找了很久没有找到


#37

额。。。

2222


#38
AttributeError: module 'mxnet.gluon.data.vision' has no attribute 'FashionMNIST'

找不到FashionMNIST


#39

@dhairoot
更新mxnet版本


#40
In [1]: import mxnet 

In [2]: mxnet.__version__
Out[2]: '0.11.0'

这不是最新的吗,用

pip install --upgrade mxnet

安装的


#41

@dhairoot
可以试试 pip install mxnet --pre