Tensorflow 回歸與分類

Tensorflow 回歸與分類

1.1 Tensorflow是什么?

Tensorflow是谷歌公司推出的開(kāi)源深度學(xué)習(xí)框架,利用它我們可以快速搭建深度學(xué)習(xí)模型棒拂。

1.2 Tensorflow是什么樣的框架岩调?

Tensorflow跟很多機(jī)器學(xué)習(xí)庫(kù)類似,采用了“流圖”方式陨献,這樣做的好處可以減小計(jì)算開(kāi)銷。一般情況下懂更,python的數(shù)值計(jì)算庫(kù)會(huì)將矩陣乘法之類的復(fù)雜計(jì)算傳送到外部外部語(yǔ)言計(jì)算(更高效的語(yǔ)言c,匯編等)眨业,但是每次計(jì)算轉(zhuǎn)換回來(lái)的操作依然是很大的開(kāi)銷。所以“流圖”方式采用沮协,先用圖和流來(lái)描述模型龄捡,再將整個(gè)模型一起送出去計(jì)算,計(jì)算完再送回來(lái)慷暂,這樣減少了轉(zhuǎn)換次數(shù)以減少開(kāi)銷聘殖。

1.3 Tensorflow怎么用?

Tensorflow內(nèi)部集成了很多的神經(jīng)網(wǎng)絡(luò)的反向傳播算法行瑞,以及其優(yōu)化方式奸腺。只需要編程設(shè)置相應(yīng)的參數(shù)即可選擇適當(dāng)?shù)姆聪騻鞑?yōu)化器。

它為我們解決了復(fù)雜的反向傳播過(guò)程的實(shí)現(xiàn)蘑辑,在構(gòu)建模型時(shí)洋机,我們只需要搭建正向的神經(jīng)網(wǎng)絡(luò)傳輸模型以及給出損失函數(shù)即可。

1.4 再具體一點(diǎn)洋魂?

在Tensorflow中操作的數(shù)據(jù)對(duì)象是tensor(包括常量和變量)绷旗,由對(duì)象和操作OP就構(gòu)成了圖Graph, 將各個(gè)圖的輸入輸出連接就形成的流圖,至此模型的表示便完成了副砍。在這個(gè)框架下表示和執(zhí)行是分開(kāi)的衔肢,因此,session會(huì)話便出場(chǎng)了豁翎,將表示放在session中就可以運(yùn)行了角骤。在運(yùn)行中很可能要使用到變量,只有數(shù)據(jù)的更新,才能得到“活水流”邦尊,那么怎么在session中賦予新的數(shù)據(jù)或者獲取新數(shù)據(jù)背桐,使用 tf.placeholder() 創(chuàng)建占位符的op中可以使用 feed 賦值如:sess.run([output], feed_dict={input1:[7.], input2:[2.]}),可以使用 fetch來(lái)獲取操作的返回值(可以是多個(gè))如: result = sess.run([mul, intermed])蝉揍。result是多個(gè)值链峭。

對(duì)于損失函數(shù)的構(gòu)建情況較多(常選擇的有均方差,信息熵等)又沾,反向優(yōu)化可以調(diào)用相應(yīng)的操作即可(常選擇梯度下降法)弊仪,下面看一個(gè)完整的例子:

import tensorflow as tf

import numpy as np

#1, 數(shù)據(jù)準(zhǔn)備

x_dat=np.float32(np.random.rand(2,100))

y_dat=np.dot([2.0,3.0],x_dat)+5.0

x = tf.placeholder(tf.float32)

y = tf.placeholder(tf.float32)

# 2杖刷,變量定義及模型構(gòu)建

W=tf.Variable(tf.random_uniform([1,2],-0.1,0.1))

b=tf.Variable(tf.zeros([1]))

y_pre=tf.matmul(W,x)+b

# 3励饵,構(gòu)建損失函數(shù)及選擇優(yōu)化器

loss=tf.reduce_mean(tf.square(y_pre-y))

optim=tf.train.GradientDescentOptimizer(0.5)

train_op=optim.minimize(loss)

# 4,初始化變量啟動(dòng)會(huì)話滑燃,訓(xùn)練

init=tf.initialize_all_variables()

sess=tf.Session()

sess.run(init)

for step in range(1,200):

? ? sess.run([train_op],feed_dict={x:x_dat,y:y_dat })

? ? if step%20 ==0 :

? ? ? ? print(sess.run([W,b]))

session在運(yùn)行之前需要構(gòu)建整個(gè)圖役听,除了sesion之外,還有一個(gè)可以在圖運(yùn)行中出入其他圖的會(huì)話InteractiveSession不瓶。


1.5多元線性回歸

下面是一個(gè)多元線性回歸的例子禾嫉,將模型構(gòu)建函數(shù)抽抽離單獨(dú)實(shí)現(xiàn),在主程序中調(diào)用蚊丐,可以使程序復(fù)用性更強(qiáng)。

敲黑板艳吠,劃重點(diǎn):

Tip1: out = tf.matmul( w,inputs) + b #注意matmul的參數(shù)順序

Tip2: optmiz = tf.train.GradientDescentOptimizer(0.1) #不收斂需調(diào)整變化率麦备,這里0.5不收斂,太小則訓(xùn)練太慢昭娩。

Tip3: train_op = optmiz.minimize(loss) #根據(jù)loss來(lái)確定改變變量的方向及數(shù)值

# 多元線性回歸

import tensorflow as tf

import numpy as np

# 模型構(gòu)建函數(shù)

def add_layer(inputs, insize, outsize, activation_fun=None):

? ? w = tf.Variable(tf.random_normal([outsize,insize]))

? ? b = tf.Variable(tf.zeros([outsize,1]))

? ? #print(inputs.shape)

? ? out = tf.matmul( w,inputs) + b #注意matmul的參數(shù)順序

? ? if activation_fun is None:

? ? ? ? output = out

? ? else:

? ? ? ? output = activation_fun(out)

? ? print(output.shape)

? ? return output,w,b

# 1,數(shù)據(jù)準(zhǔn)備

x_dat = np.float32(np.random.rand(5,200))

y_dat = np.dot([2.0, 3.0, 2.0,4.0,9.0],x_dat)+5.0

x = tf.placeholder(tf.float32)

y = tf.placeholder(tf.float32)

# 2凛篙,模型構(gòu)建,變量定義

y_pre,w,b = add_layer(x, 5, 1, activation_fun=None)

# 3栏渺,構(gòu)建損失函數(shù)及選擇優(yōu)化器

loss = tf.reduce_mean(tf.square(y-y_pre))

#loss = tf.reduce_mean(-tf.reduce_sum(y * tf.log(y_pre),reduction_indices=[1]))

optmiz = tf.train.GradientDescentOptimizer(0.1)? #不收斂需調(diào)整變化率呛梆,這里0.5不收斂,太小則訓(xùn)練太慢磕诊。

train_op = optmiz.minimize(loss) #根據(jù)loss來(lái)確定改變變量的方向及數(shù)值

# 4填物,啟動(dòng)會(huì)話,初始化變量霎终,訓(xùn)練

init = tf.global_variables_initializer()

with tf.Session() as sess:

? ? sess.run(init)

? ? for step in range(2000):

? ? ? ? sess.run([train_op],feed_dict={x: x_dat, y: y_dat})

? ? ? ? if step % 200 == 0:

? ? ? ? ? ? print(sess.run([loss,w,b],feed_dict={x: x_dat, y: y_dat}))

結(jié)果如下:

1.6分類的例子:

# 分類

import tensorflow as tf

import numpy as np

import random

# AX=0 相當(dāng)于matlab中 null(a','r')

def null(a, rtol=1e-5):

? ? u, s, v = np.linalg.svd(a)

? ? rank = (s > rtol * s[0]).sum()

? ? return rank, v[rank:].T.copy()

# 符號(hào)函數(shù)滞磺,之后要進(jìn)行向量化

def sign(x):

? ? if x > 0:

? ? ? ? return 1

? ? elif x == 0:

? ? ? ? return 0

? ? elif x < 0:

? ? ? ? return -1

# noisy=False,那么就會(huì)生成N的dim維的線性可分?jǐn)?shù)據(jù)X莱褒,標(biāo)簽為y

# noisy=True, 那么生成的數(shù)據(jù)是線性不可分的,標(biāo)簽為y

def mk_data(N, noisy=False):

? ? rang = [-1, 1]

? ? dim = 5

? ? X = np.random.rand(dim, N) * (rang[1] - rang[0]) + rang[0]

? ? while True:

? ? ? ? Xsample = np.concatenate((np.ones((1, dim)), np.random.rand(dim, dim) * (rang[1] - rang[0]) + rang[0]))

? ? ? ? k, w = null(Xsample.T)

? ? ? ? y = sign(np.dot(w.T, np.concatenate((np.ones((1, N)), X))))

? ? ? ? print(y[0][5])

? ? ? ? if np.all(y):

? ? ? ? ? ? break

? ? day=[]

? ? if noisy == True:

? ? ? ? idx = random.sample(range(1, N), N / 10)

? ? ? ? y[idx] = -y[idx]

? ? for st in range(200):

? ? ? ? if(y[0][st]==1):

? ? ? ? ? ? y1 = [1,0]

? ? ? ? else:

? ? ? ? ? ? y1 = [0,1]

? ? ? ? day.append(y1)

? ? da_x = np.float32(X.transpose())

? ? da_y = np.float32(day)

? ? return da_x, da_y, w

# 模型構(gòu)建函數(shù)

def add_layer(insize, outsize, input, function = None):

? ? weight = tf.Variable(tf.random_normal([insize,outsize]))

? ? basize = tf.Variable(tf.zeros([outsize]))

? ? out = tf.matmul(input, weight) + basize

? ? if(function == None):

? ? ? ? output = out

? ? else:

? ? ? ? output = function(out)

? ? return output

# 1,數(shù)據(jù)準(zhǔn)備

#產(chǎn)生的數(shù)據(jù)為隨機(jī)數(shù)據(jù)击困,訓(xùn)練結(jié)果可能會(huì)不穩(wěn)定

sign = np.vectorize(sign)

x_dat, y_dat, w = mk_data(200)

#x_dat = np.float32(np.random.rand(200,5)*5+10)

#y_dat = np.float32(np.zeros([200,2]))

# x_dat2 = np.float32(np.random.rand(200,5))

# y_dat2 = np.float32(np.zeros([200,2])+1)

x = tf.placeholder(tf.float32)

y = tf.placeholder(tf.float32)

print(x_dat.shape)

print(y_dat.shape)

# 2,模型構(gòu)建广凸,變量定義

y_pre = add_layer(5,2,x,tf.nn.softmax)

# 3阅茶,構(gòu)建損失函數(shù)及選擇優(yōu)化器

loss = -tf.reduce_sum(y*tf.log(y_pre))

optim = tf.train.GradientDescentOptimizer(0.05)

train_op = optim.minimize(loss)

accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(y_pre),tf.argmax(y)),tf.float32))

# 4蛛枚,啟動(dòng)會(huì)話,初始化變量脸哀,訓(xùn)練

init = tf.global_variables_initializer()

with tf.Session() as sess:

? ? sess.run(init)

? ? for step in range(2000):

? ? ? ? sess.run([train_op],feed_dict={x:x_dat,y:y_dat})

? ? ? ? if step % 100 == 0 :

? ? ? ? ? ? print(sess.run([loss,accuracy],feed_dict={x:x_dat,y:y_dat}))

? ? ? ? ? ? print(accuracy.eval(feed_dict={x:x_dat,y:y_dat}))


————————————————

版權(quán)聲明:本文為CSDN博主「AI小白龍」的原創(chuàng)文章蹦浦,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明企蹭。

原文鏈接:https://blog.csdn.net/qq_34106574/article/details/94406204

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末白筹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谅摄,更是在濱河造成了極大的恐慌徒河,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件送漠,死亡現(xiàn)場(chǎng)離奇詭異顽照,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)闽寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門代兵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人爷狈,你說(shuō)我怎么就攤上這事植影。” “怎么了涎永?”我有些...
    開(kāi)封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵思币,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我羡微,道長(zhǎng)谷饿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任妈倔,我火速辦了婚禮博投,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盯蝴。我一直安慰自己毅哗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布结洼。 她就那樣靜靜地躺著黎做,像睡著了一般。 火紅的嫁衣襯著肌膚如雪松忍。 梳的紋絲不亂的頭發(fā)上蒸殿,一...
    開(kāi)封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼宏所。 笑死酥艳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爬骤。 我是一名探鬼主播充石,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼霞玄!你這毒婦竟也來(lái)了骤铃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坷剧,失蹤者是張志新(化名)和其女友劉穎惰爬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惫企,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撕瞧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狞尔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丛版。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖偏序,靈堂內(nèi)的尸體忽然破棺而出页畦,到底是詐尸還是另有隱情,我是刑警寧澤研儒,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布寇漫,位于F島的核電站,受9級(jí)特大地震影響殉摔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜记焊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一逸月、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遍膜,春花似錦碗硬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挽懦,卻和暖如春翰意,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工冀偶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醒第,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓进鸠,卻偏偏與公主長(zhǎng)得像稠曼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子客年,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容