成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從零開始使用TensorFlow建立簡單的邏輯回歸模型

移動開發(fā) 深度學(xué)習(xí)
TensorFlow 是一個基于 python 的機(jī)器學(xué)習(xí)框架。在 Coursera 上學(xué)習(xí)了邏輯回歸的課程內(nèi)容后,想把在 MATLAB 中實(shí)現(xiàn)了的內(nèi)容用 TensorFlow 重新實(shí)現(xiàn)一遍,當(dāng)做學(xué)習(xí) Python 和框架的敲門磚。
TensorFlow 是一個基于 python 的機(jī)器學(xué)習(xí)框架。在 Coursera 上學(xué)習(xí)了邏輯回歸的課程內(nèi)容后,想把在 MATLAB 中實(shí)現(xiàn)了的內(nèi)容用 TensorFlow 重新實(shí)現(xiàn)一遍,當(dāng)做學(xué)習(xí) Python 和框架的敲門磚。

目標(biāo)讀者

知道邏輯回歸是什么,懂一點(diǎn) Python,聽說過 TensorFlow

數(shù)據(jù)集

來自 Coursera 上 Andrew 的機(jī)器學(xué)習(xí)課程中的ex2data1.txt,根據(jù)學(xué)生的兩次考試成績判斷該學(xué)生是否會被錄取。

環(huán)境

Python 2.7 - 3.x

pandas, matplotlib, numpy

安裝 TensorFlow

在自己的電腦上安裝 TensorFlow 框架,安裝方法過程不贅述,CPU 版相對更容易一點(diǎn),GPU 版需要 CUDA 支持,各位看官看情況安裝就好。

開始

創(chuàng)建一個文件夾(比如就叫做tensorflow),在文件夾中創(chuàng)建一個 Python 文件main.py,并將數(shù)據(jù)集文件放到這個文件夾下:

https://s5.51cto.com/wyfs02/M02/9A/53/wKiom1lUb1_QUyZOAAAtgcLVUKU607.jpg

數(shù)據(jù)形式:

 https://s3.51cto.com/wyfs02/M01/9A/53/wKiom1lUb2Lx6xeJAAEaFTUwbRI891.jpg

前兩列分別為兩次考試成績(x1, x2),***一列為是否被錄取(y),1代表被錄取,0則反之。

在源文件main.py中,我們首先引入需要的包:

import pandas as pd                # 用于讀取數(shù)據(jù)文件
import tensorflow as tf
import matplotlib.pyplot as plt    # 用于畫圖
import numpy as np                 # 用于后續(xù)計(jì)算

pandas是一個數(shù)據(jù)處理相關(guān)的包,可以對數(shù)據(jù)集進(jìn)行讀取和其他各種操作;matplotlib可以用來把我們的數(shù)據(jù)集繪成圖表展示出來。

接著我們將數(shù)據(jù)集文件讀入程序,用于后面的訓(xùn)練:

# 讀取數(shù)據(jù)文件
df = pd.read_csv("ex2data1.txt", header=None)
train_data = df.values

pandas函數(shù)read_csv可以將 csv(comma-separated values)文件中的數(shù)據(jù)讀入df變量,通過df.values將 DataFrame 轉(zhuǎn)化為二維數(shù)組:

 https://s2.51cto.com/wyfs02/M02/9A/53/wKioL1lUb2KREW-UAAESR4t64Z4035.jpg

有了數(shù)據(jù)之后,我們需要將特征(x1, x2)和標(biāo)簽(y)分別放到兩個變量中,以便在訓(xùn)練中代入公式:

# 分離特征和標(biāo)簽,并獲取數(shù)據(jù)維數(shù)
train_X = train_data[:, :-1]
train_y = train_data[:, -1:]
feature_num = len(train_X[0])
sample_num = len(train_X)
print("Size of train_X: {}x{}".format(sample_num, feature_num))
print("Size of train_y: {}x{}".format(len(train_y), len(train_y[0])))

[[195335]]

可以看到,我們的數(shù)據(jù)集中有100條樣例,每條樣例的特征數(shù)量為2。

TensorFlow 模型設(shè)計(jì)

在邏輯回歸中,我們使用的預(yù)測函數(shù)(Hypothesis)為:

hθ(x)=sigmoid(XW+b)

其中,sigmoid是一個激活函數(shù),在這里表示學(xué)生被錄取的概率: 

P(y=1|x,θ)

這個函數(shù)的形狀請自行百度

W 和 b 是我們接下來的學(xué)習(xí)目標(biāo),W 為權(quán)值矩陣(Weights),b 為偏置量(Bias,體現(xiàn)在圖像上又叫截距)。

我們使用的損失函數(shù)為:

J(θ)=−1m[∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]

由于我們的數(shù)據(jù)集只有兩個特征,因此不用擔(dān)心過擬合,所以損失函數(shù)里的正規(guī)化項(xiàng)就不要了😌。

首先我們用 TensorFlow 定義兩個變量用來存放我們的訓(xùn)練用數(shù)據(jù):

# 數(shù)據(jù)集
X = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

這里的X和y不是一般的變量,而是一個 placeholder(占位符),意味著這兩個變量的值是未指定的,直到你開始訓(xùn)練模型時才需要將給定的數(shù)據(jù)賦值給變量。

接著我們再定義出我們要訓(xùn)練的 W 和 b:

# 訓(xùn)練目標(biāo)
W = tf.Variable(tf.zeros([feature_num, 1]))
b = tf.Variable([-.9])

這里他們的類型為 Variable(變量),意味著這兩個變量將在訓(xùn)練迭代的過程中不斷地變化,最終取得我們期望的值。可以看到,我們將 W 的初始值設(shè)為了 feature_num 維的0向量,將 b 初始值設(shè)為了 -0.9(隨便設(shè)的,不要介意😶)

接下來我們要用 TensorFlow 的方式將損失函數(shù)表達(dá)出來:

db = tf.matmul(X, tf.reshape(W, [-1, 1])) + b
hyp = tf.sigmoid(db)

cost0 = y * tf.log(hyp)
cost1 = (1 - y) * tf.log(1 - hyp)
cost = (cost0 + cost1) / -sample_num
loss = tf.reduce_sum(cost)

可以看到,我表達(dá)損失函數(shù)是分三步進(jìn)行的:先分別將求和內(nèi)的兩部分表示出來,再將它們加和并和外面的常數(shù)m進(jìn)行運(yùn)算,***對這個向量進(jìn)行求和,便得到了損失函數(shù)的值。

接下來,我們要定義使用的優(yōu)化方法:

optimizer = tf.train.GradientDescentOptimizer(0.001)
train = optimizer.minimize(loss)

其中,***步是選取優(yōu)化器,這里我們選擇梯度下降方法;第二步是優(yōu)化目標(biāo),從函數(shù)名字顧名思義,我們的優(yōu)化目標(biāo)是使得損失函數(shù)的值最小化。

注意:此處的學(xué)習(xí)率(0.001)應(yīng)當(dāng)盡可能小,否則可能會出現(xiàn)損失計(jì)算中出現(xiàn) log(0)的問題。

訓(xùn)練

上面的工作做完之后,我們就可以開始訓(xùn)練我們的模型了。

在 TensorFlow 中,首先要將之前定義的Variable初始化:

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

在這里,我們看到出現(xiàn)了一個tf.Session(),顧名思義是會話,即任務(wù)執(zhí)行的主體。我們上面定義了一堆東西,只是一個模型為了得到結(jié)果而需要的執(zhí)行步驟和框架,一個類似流程圖的東西,光有流程圖還不夠,我們需要一個主體來實(shí)際地運(yùn)行它,這就是Session的作用。

----------特別提示----------

如果你是使用 GPU 版 TensorFlow 的話,并且你想在顯卡高占用率的情況下(比如玩游戲)訓(xùn)練模型,那你要注意在初始化 Session 的時候為其分配固定數(shù)量的顯存,否則可能會在開始訓(xùn)練的時候直接報(bào)錯退出:

2017-06-27 20:39:21.955486: E c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\35\tensorflow\stream_executor\cuda\cuda_blas.cc:365] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
Traceback (most recent call last):
  File "C:\Users\DYZ\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py", line 1139, in _do_call
    return fn(*args)
  File "C:\Users\DYZ\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py", line 1121, in _run_fn
    status, run_metadata)
  File "C:\Users\DYZ\Anaconda3\envs\tensorflow\lib\contextlib.py", line 66, in __exit__
    next(self.gen)
  File "C:\Users\DYZ\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 466, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InternalError: Blas GEMV launch failed:  m=2, n=100
         [[Node: MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/gpu:0"](_arg_Placeholder_0_0/_3, Reshape)]]

這時你需要用下面的方法創(chuàng)建 Session:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

這里的0.333就是占你總顯存的份額。

----------End 特別提示----------

下面就是用我們的數(shù)據(jù)集來對模型進(jìn)行訓(xùn)練了:

feed_dict = {X: train_X, y: train_y}

for step in range(1000000):
    sess.run(train, {X: train_X, y: train_y})
    if step % 100 == 0:
        print(step, sess.run(W).flatten(), sess.run(b).flatten())

首先講要傳入的數(shù)據(jù)存放到一個變量中,在訓(xùn)練模型時傳入 sess.run();我們進(jìn)行 10000 次訓(xùn)練,每隔 100
次輸出一次當(dāng)前的目標(biāo)參數(shù) W, b。

到這里,訓(xùn)練代碼的部分就完成了,你可以使用你自己的 python 命令來運(yùn)行了。如果你嚴(yán)格按照上面的代碼做了,不出現(xiàn)錯誤,你現(xiàn)在應(yīng)該可以看到控制臺里已經(jīng)開始不斷輸出訓(xùn)練狀態(tài)了:

https://s2.51cto.com/wyfs02/M01/9A/53/wKioL1lUbrTikaBFAAHSU7Yg02k376.png

圖形化表示結(jié)果

當(dāng)訓(xùn)練結(jié)束后,你可以得到一個 W,和一個 b,這樣我們可以將數(shù)據(jù)集和擬合的結(jié)果通過圖表直觀地展現(xiàn)出來。

就在寫作的過程中,我用上面的代碼訓(xùn)練出了一個結(jié)果:

https://s1.51cto.com/wyfs02/M02/9A/53/wKiom1lUbrTCNwk3AAAn87c3eiM452.png

我們將其直接寫入代碼,即:

w = [0.12888144, 0.12310864]
b = -15.47322273

下面我們先將數(shù)據(jù)集表示在圖表上(x1為橫軸,x2為縱軸):

x1 = train_data[:, 0]
x2 = train_data[:, 1]
y = train_data[:, -1:]

for x1p, x2p, yp in zip(x1, x2, y):
    if yp == 0:
        plt.scatter(x1p, x2p, marker='x', c='r')
    else:
        plt.scatter(x1p, x2p, marker='o', c='g')

其中,我們用 紅色的x 代表 沒有被錄取,用 綠色的o 代表 被錄取。

其次我們將訓(xùn)練得出的決策邊界 XW + b = 0 表示到圖表上:

# 根據(jù)參數(shù)得到直線
x = np.linspace(20, 100, 10)
y = []
for i in x:
    y.append((i * -w[1] - b) / w[0])
    
plt.plot(x, y)
plt.show()

此時,如果你的代碼沒錯的話,再次運(yùn)行,你將得到如下結(jié)果:

可以看到,我們通過訓(xùn)練得出的參數(shù)劃出一條直線,非常合適地將兩種不同的數(shù)據(jù)樣例區(qū)分開來。

到此,一個完整的簡單的邏輯回歸模型就實(shí)現(xiàn)完畢了,希望通過這篇文章,能讓各位看官對在 TensorFlow 中機(jī)器學(xué)習(xí)模型的實(shí)現(xiàn)有一個初步的了解。本人也在初步學(xué)習(xí)當(dāng)中,如有不當(dāng)之處歡迎在評論區(qū)拍磚,在實(shí)現(xiàn)以上代碼的過程中如果遇到什么問題也請?jiān)谠u論區(qū)隨意開火。

責(zé)任編輯:林師授 來源: segmentfault
相關(guān)推薦

2018-05-09 20:08:09

人工智能深度學(xué)習(xí)Python

2021-04-21 20:42:42

Nadam梯度優(yōu)化

2024-07-31 08:14:17

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2021-03-16 11:30:33

2016-11-02 14:18:45

搭建論壇Flask框架

2025-04-17 09:00:00

2010-05-26 17:35:08

配置Xcode SVN

2018-09-14 17:16:22

云計(jì)算軟件計(jì)算機(jī)網(wǎng)絡(luò)

2024-05-15 14:29:45

2013-09-22 10:15:01

Spring DataJPA

2019-09-30 10:51:11

Markdown標(biāo)記語言

2023-06-02 07:37:12

LLM?大語言模型

2020-02-11 16:49:24

React前端代碼

2023-03-11 22:29:59

GitGitHub開發(fā)

2018-08-20 08:15:50

編程語言Go語言切片
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: www.youjizz.com日韩| 草草草久久久 | 国产精品久久av | 中文字幕av网站 | 蜜桃视频一区二区三区 | 精品成人在线观看 | 久久久久亚洲精品 | 在线91| 日韩高清黄色 | 国产一区二区三区久久 | 亚洲一区播放 | 欧美福利久久 | 中文字字幕一区二区三区四区五区 | 午夜免费在线电影 | 午夜精品一区二区三区免费视频 | 一区二区三区国产好 | 日韩欧美在线观看视频网站 | 国产精品一区二区福利视频 | 亚洲国产精品99久久久久久久久 | 成人免费视频网站在线看 | 免费一级片| 国产一级片在线播放 | 日本免费一区二区三区 | 毛片在线免费 | 奇米四色在线观看 | 91精品久久久久久久久久 | 91久久精品一区二区二区 | ww亚洲ww亚在线观看 | 国产婷婷色一区二区三区 | 国产美女一区二区三区 | 免费一级片 | 四色永久 | 亚洲男人天堂 | 国产日韩欧美电影 | 在线免费观看视频黄 | 日韩在线免费视频 | 黄色在线网站 | 神马九九 | 黄片毛片在线观看 | 亚洲伊人精品酒店 | 亚洲乱码国产乱码精品精的特点 |