博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区分类型(分类)
阅读量:5166 次
发布时间:2019-06-13

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

1.填数据

2.构造神经网络模型

3.训练模型

4.绘图

代码如下

import torchimport matplotlib.pyplot as pltimport torch.nn.functional as F     # 激励函数都在这#step1# 假数据n_data = torch.ones(100, 2)         # 数据的基本形态x0 = torch.normal(2*n_data, 1)      # 类型0 x data (tensor), shape=(100, 2)y0 = torch.zeros(100)               # 类型0 y data (tensor), shape=(100, )x1 = torch.normal(-2*n_data, 1)     # 类型1 x data (tensor), shape=(100, 1)y1 = torch.ones(100)                # 类型1 y data (tensor), shape=(100, )# 注意 x, y 数据的数据形式是一定要像下面一样 (torch.cat 是在合并数据)x = torch.cat((x0, x1), 0).type(torch.FloatTensor)  # FloatTensor = 32-bit floatingy = torch.cat((y0, y1), ).type(torch.LongTensor)    # LongTensor = 64-bit integer#step2#构造神经网络class Net(torch.nn.Module):     # 继承 torch 的 Module    def __init__(self, n_feature, n_hidden, n_output):        super(Net, self).__init__()     # 继承 __init__ 功能        self.hidden = torch.nn.Linear(n_feature, n_hidden)   # 隐藏层线性输出        self.out = torch.nn.Linear(n_hidden, n_output)       # 输出层线性输出    def forward(self, x):        # 正向传播输入值, 神经网络分析出输出值        x = F.relu(self.hidden(x))      # 激励函数(隐藏层的线性值)        x = self.out(x)                 # 输出值, 但是这个不是预测值, 预测值还需要再另外计算        return xnet = Net(n_feature=2, n_hidden=10, n_output=2) # 几个类别就几个 outputfor param in net.parameters():     print(type(param.data), param.size())#step3#训练网络# optimizer 是训练的工具optimizer = torch.optim.SGD(net.parameters(), lr=0.02)  # 传入 net 的所有参数, 学习率# 算误差的时候, 注意真实值!不是! one-hot 形式的, 而是1D Tensor, (batch,)# 但是预测值是2D tensor (batch, n_classes)loss_func = torch.nn.CrossEntropyLoss()for t in range(100):#训练100次    out = net(x)     # 喂给 net 训练数据 x, 输出分析值    loss = loss_func(out, y)     # 计算两者的误差    optimizer.zero_grad()   # 清空上一步的残余更新参数值    loss.backward()         # 误差反向传播, 计算参数更新值    optimizer.step()        # 将参数更新值施加到 net 的 parameters 上    # 接着上面来    if t % 2 == 0:        plt.cla()        # 过了一道 softmax 的激励函数后的最大概率才是预测值        prediction = torch.max(F.softmax(out), 1)[1]        pred_y = prediction.data.numpy().squeeze()        target_y = y.data.numpy()        plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlGn')        accuracy = sum(pred_y == target_y) / 200.  # 预测中有多少和真实值一样        plt.text(1.5, -4, 'Accuracy=%.2f' % accuracy, fontdict={
'size': 20, 'color': 'red'}) plt.pause(0.1)plt.ioff() # 停止画图plt.show()

转载于:https://www.cnblogs.com/Archer-Fang/p/10645687.html

你可能感兴趣的文章
代码高亮测试
查看>>
CES1
查看>>
CES2
查看>>
多波次导弹发射中的规划问题(二)
查看>>
python 数据类型_数组和元组
查看>>
python os模块和sys模块
查看>>
数据结构----链表
查看>>
python 数据类型_字符串
查看>>
python 数据类型_整数_浮点数
查看>>
数据结构----prim算法 最小生成树
查看>>
python 数据类型_字典和集合
查看>>
算法笔记_170:历届试题 分糖果(Java)
查看>>
一种并行随机梯度下降法
查看>>
PHP中的list()
查看>>
文件方式实现完整的英文词频统计实例
查看>>
ListControl的用法
查看>>
单个SWF文件loading加载详解(转)
查看>>
Python3 指定文件夹下所有文件(包括子目录下的文件)拷贝到目标文件夹下
查看>>
SQLServer中的CTE通用表表达式
查看>>
ural 1133. Fibonacci Sequence
查看>>