<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這次我們搭建一個小小的多層線性網路對糖尿病的病例進行分類
首先先匯入需要的庫檔案
先來看看我們的資料集
觀察可以發現,前八列是我們的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 列印出前兩行的結果
搭建網路的時候,要保證兩層網路之間的維數能對應上
首先第一層的時候,因為前八列作為我們的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
訓練網路的過程較為簡單,大概的過程為
1. 計算預測值
2. 計算損失函數
3. 反向傳播,之前要進行梯度清零
4. 梯度更新
5. 重複這個過程,epoch 為所有樣本計算一次的週期,這次讓epoch 迭代1000次
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()
輸出結果為:
到此這篇關於Python線性網路實現分類糖尿病病例的文章就介紹到這了,更多相關Python線性網路內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45