
1.纯粹的mxnet实现
import d2lzh as d2l
from mxnet import autograd,nd
#读取数据集
batch_size=256
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)
num_inputs=28*28
num_outputs=10
#初始化模型参数
W=nd.random.normal(scale=0.01,shape=(num_inputs,num_outputs))
b=nd.zeros(num_outputs)
W.attach_grad()
b.attach_grad()
#softmax运算
def softmax(X):
X_exp=X.exp()
#keepdims保留行和列两个维度,axis=1同一行元素求和
partition=X_exp.sum(axis=1,keepdims=True)
return X_exp/partition
#定义模型
def net(X):
return softmax(nd.dot(X.reshape((-1,num_inputs)),W)+b)
#定义损失函数
def cross_entropy(y_hat,y):
return -nd.pick(y_hat,y).log()
#计算准确率
def accuracy(y_hat,y):
return (y_hat.argmax(axis=1)==y.astype('float32')).mean().asscalar()
#训练模型
num_epochs,lr=5,0.1
d2l.train_ch3(net,train_iter,test_iter,cross_entropy,num_epochs,batch_size,[W,b],lr)
#预测
for X,y in