IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 线性网络对糖尿病进行分类 -> 正文阅读

[人工智能]线性网络对糖尿病进行分类

目录

1. 加载数据集

2. 搭建网络+优化器

3. 训练网络

4. 代码


1. 加载数据集

这次我们搭建一个小小的多层线性网络对糖尿病的病例进行分类

首先先导入需要的库文件

?先来看看我们的数据集

?观察可以发现,前八列是我们的feature ,根据这八个特征可以判断出病人是否得了糖尿病。所以最后一列是1,0 的一个二分类问题

我们使用numpy 去导入数据集,delimiter 是定义分隔符,这里我们用逗号(,)分割

将前八列的特征放到我们的x_data里面,作为特征输入,最后一列放到y_data作为label

Tip :这里y_data 里面的 [-1] 中括号不可以省略,否则y_data会变成向量的形式

如果不习惯这种写法,可以用view改变一下形状就行

y_data = torch.from_numpy(xy[:,-1]).view(-1,1)? ?#将y_data 的代码改成这样就可以了

下面是xy , x_data , y_data 打印出前两行的结果

?

?

2. 搭建网络+优化器

搭建网络的时候,要保证两层网络之间的维数能对应上

首先第一层的时候,因为前八列作为我们的x_data ,也就是说我们输入的特征是 8 维度的,那么由于 y = x * wT + b ,因为输入数据的x是(n * 8) 的,而我们定义的y维度是(n * 6) ,所以wT的维度应该是(8,6)

这里不需要知道啥时候转置,啥时候不转置之类的,只要满足线性的方程y = w*x+b,并且维度一致就行了。因为不管是转置,或者w和x谁在前,只是为了保证满足矩阵相乘而已

一个小的技巧就是:只需要看输入特征是多少,然后保证第一层第一个参数对应就行了,然后第一层第二个参数是想输出的维度。其次是第二层的第一个参数对应第一层第二个参数,以此类推....

我们采用的激活函数是ReLU , 由于是二元分类,最后一个网络的输出我们采用sigmoid输出

接下来,搭建实例化我们的网络,然后建立优化器

这里我们选择SGD随机梯度下降算法,学习率设置为0.01

3. 训练网络

?训练网络的过程较为简单,大概的过程为

1. 计算预测值

2. 计算损失函数

3. 反向传播,之前要进行梯度清零

4. 梯度更新

5. 重复这个过程,epoch 为所有样本计算一次的周期,这次让epoch 迭代1000次

4. 代码

import torch.nn as nn    # 神经网络库
import matplotlib.pyplot as plt  # 绘图
import torch        # 张量
from torch import optim  # 优化器库
import numpy as np          # 数据处理

xy = np.loadtxt('./diabetes.csv.gz',delimiter=',',dtype=np.float32)    # 加载数据集
x_data = torch.from_numpy(xy[:,:-1])  # 所有行,除了最后一列的元素
y_data = torch.from_numpy(xy[:,-1]).view(-1,1) # -1也能拿出来是向量,但是[-1]会保证拿出来的是个矩阵

epoch_list =[]
loss_list = []

class Model(nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.linear1 = nn.Linear(8,6)
        self.linear2 = nn.Linear(6,3)
        self.linear3 = nn.Linear(3,1)
        self.sigmoid = nn.Sigmoid()
        self.relu = nn.ReLU()

    def forward(self,x):
        x = self.relu(self.linear1(x))
        x = self.relu(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        return x

model = Model()
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(),lr =0.01)

for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)   # 计算损失

    if epoch % 100 ==0:   # 每隔100次打印一下
        print(epoch,loss.item())

    #back propagation
    optimizer.zero_grad()    # 梯度清零
    loss.backward()          # 反向传播
    optimizer.step()         # 梯度更新

    epoch_list.append(epoch)
    loss_list.append(loss.item())

plt.plot(epoch_list,loss_list)
plt.show()

输出结果为:

?

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:33:42  更:2022-10-17 12:34:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:30:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码