博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MXNet动手学深度学习笔记:多类别分类
阅读量:7080 次
发布时间:2019-06-28

本文共 3223 字,大约阅读时间需要 10 分钟。

  hot3.png

#coding:utf-8'''多类别分类'''from mxnet import gluonfrom mxnet import ndarrayfrom mxnet import autogradimport numpy as npimport matplotlib.pyplot as pltfrom mxnet import nddef transform(data,label):    return data.astype('float32') / 255,label.astype('float32')mnist_train = gluon.data.vision.FashionMNIST(train=True,transform=transform)mnist_test = gluon.data.vision.FashionMNIST(train=False,transform=transform)# 显示样本的形状和标号data,label = mnist_train[0]print('shape:',data.shape,',label:',label)def show_images(images):    n = images.shape[0]    _,figs = plt.subplots(1,n,figsize=(15,15))    for i in range(n):        figs[i].imshow(images[i].reshape((28,28)).asnumpy())        figs[i].axes.get_xaxis().set_visible(False)        figs[i].axes.get_yaxis().set_visible(False)    plt.show()def get_text_labels(label):    text_labels = [        't-shirt','trouser','pullover','dress','coat',        'sandal','shirt','sneaker','bag','ankle boot'    ]    return [text_labels[int(i)] for i in label]# 显示数据# data,label = mnist_train[0:9]# show_images(data)# print(get_text_labels(label))# 读取数据batch_size = 64train_data = gluon.data.DataLoader(mnist_train,batch_size,shuffle=True)test_data = gluon.data.DataLoader(mnist_test,batch_size,shuffle=False)# 初始化模型参数num_inputs = 784num_outputs = 10W = nd.random_normal(shape=(num_inputs,num_outputs))b = nd.random_normal(shape=num_outputs)params = [W,b]# 申请自动求导for param in params:    param.attach_grad()# 定义模型def softmax(X):    exp = nd.exp(X)    partition = exp.sum(axis = 1,keepdims = True)    return exp / partition# X = nd.random_normal(shape=(2,5))# X_prob = softmax(X)# print(X_prob)# print(X_prob.sum(axis = 1))# ots = nd.dot(X.reshape((-1,num_inputs)),W) + b# print('X.reshape(-1,nums_input):',X.reshape((-1,num_inputs)).shape)# print('ots.shape:',ots.shape)# print('exp:',np.exp(ots.asnumpy()))def net(X):    return softmax(nd.dot(X.reshape((-1,num_inputs)),W) + b)# 定义损失函数,交叉熵损失函数def cross_entropy(yhat,y):    return -nd.pick(nd.log(yhat),y)# 定义精度计算def accuracy(output,label):    return nd.mean(output.argmax(axis=1) == label).asscalar()# 估计模型精度def evaluate_accuracy(data_iterator,net):    acc = 0    for data,label in data_iterator:        output = net(data)        acc += accuracy(output,label)        return acc / len(data_iterator)# 优化器def SGD(params,lr):    for param in params:        param[:] = param - lr * param.grad# 训练learning_rate = 0.1epochs = 5for epoch in range(epochs):    train_loss = 0.0    train_acc = 0.0    for data,label in train_data:        with autograd.record():            output = net(data)            loss = cross_entropy(output,label)                loss.backward()        SGD(params,learning_rate / batch_size)        train_loss += nd.mean(loss).asscalar()        train_acc += accuracy(output,label)    test_acc = evaluate_accuracy(test_data,net)    print('Epoch: %d, Loss %f, Train_Acc:%f, Test_Acc:%f .' %(epoch,train_loss/len(train_data),            train_acc / len(train_data),test_acc))# 预测data, label = mnist_test[0:9]show_images(data)print('true labels')print(get_text_labels(label))predicted_labels = net(data).argmax(axis=1)print('predicted labels')print(get_text_labels(predicted_labels.asnumpy()))

 

转载于:https://my.oschina.net/wujux/blog/1809140

你可能感兴趣的文章