tensorflow入門應用方法——線性回歸和邏輯回歸

本文主要闡述應用tensorflow搭建簡單的線性回歸司顿,邏輯回歸模型芒粹,搭建流程較清晰,主要劃分以下步驟:

  1. 定義輸入數(shù)據(jù)大溜,常用placeholder占位符定義化漆;
  2. 初始化參數(shù),初始化隨機钦奋;
  3. 定義模型座云,例如,線性函數(shù)付材,邏輯回歸方程等朦拖,這里主要是每層的激活函數(shù);
  4. 定義損失函數(shù);
  5. 定義梯度下降模型;
  6. 預測模型精度;
  7. 迭代計算厌衔,結(jié)合前向后向計算璧帝,更新參數(shù),從而最小化損失函數(shù)富寿。

線性回歸實現(xiàn)

為了實現(xiàn)線性回歸模型睬隶,首先需要創(chuàng)建訓練數(shù)據(jù)。這里页徐,我們以方程y=0.1*x+0.3為基礎苏潜,利用高斯分布隨機創(chuàng)建一些(x, y)訓練數(shù)據(jù):

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt


# 隨機生成1000個點
num_points = 1000
vectors_set = []
for i in range(num_points):
    x1 = np.random.normal(0.0, 1)
    y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.01)
    vectors_set.append([x1, y1])


# 生成一些樣本
x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]

# 畫出圖像
plt.scatter(x_data, y_data, c='r')
plt.show()

運行以上代碼,得到以下初始化圖片:

線性回歸訓練數(shù)據(jù)

下面变勇,開始構(gòu)建模型:

# 初始化參數(shù)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='W')
b = tf.Variable(tf.zeros([1]), name='b')
# 求線性函數(shù)
y = W * x_data + b

# 求損失函數(shù)
loss = tf.reduce_mean(tf.square(y-y_data), name='loss')
# 梯度下降
optimizer = tf.train.AdamOptimizer(0.2)
train = optimizer.minimize(loss, name='train')

# 迭代最小化損失值求結(jié)果
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    for step in range(100):
        sess.run(train)
        print('W=', sess.run(W), 'b=', sess.run(b), 'loss=', sess.run(loss))

這里直接上代碼恤左,簡單明了,具體步驟可見代碼中的注釋搀绣。代碼中迭代運行了100次赃梧,擬合以后的結(jié)果如下:

W= [ 0.1014075] b= [ 0.30171829] loss= 0.000109523

邏輯回歸

為了實現(xiàn)邏輯回歸模型,這里主要應用MNIST數(shù)據(jù)集豌熄,一個整合了手寫識別圖片方面的數(shù)據(jù)集授嘀。加載數(shù)據(jù)如下:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data


mnist = input_data.read_data_sets('data/', one_hot=True)

trainimg = mnist.train.images
trainlabel = mnist.train.labels
testimg = mnist.test.images
testlabel = mnist.test.labels

print('MNIST loaded')

下面構(gòu)建邏輯回歸模型

# 輸入數(shù)據(jù)用placeholder占位
x = tf.placeholder('float', [None, 784])
y = tf.placeholder('float', [None, 10])
# 初始化參數(shù)
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# 激活函數(shù)
actv = tf.nn.softmax(tf.add(tf.matmul(x, W), b))
# 損失函數(shù)
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(actv), reduction_indices=1))
# 梯度下降
learning_rate = 0.01
optm = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)

# 預測-求精度
pred = tf.equal(tf.arg_max(actv, 1), tf.arg_max(y, 1))
accr = tf.reduce_mean(tf.cast(pred, 'float'))

# 迭代損失值最小化-更新參數(shù),求精度
init = tf.global_variables_initializer()
training_epochs = 50
batch_size = 100
display_step = 5
sess = tf.Session()
sess.run(init)
for epoch in range(training_epochs):
    avg_cost = 0
    num_batch = int(mnist.train.num_examples/batch_size)
    for i in range(num_batch):
        batch_xs, batch_ys = mnist.train.next_batch(batch_size)
        sess.run(optm, feed_dict={x: batch_xs, y: batch_ys})
        avg_cost += sess.run(cost, feed_dict={x: batch_xs, y: batch_ys})/num_batch
    if epoch%display_step == 0:
        train_acc = sess.run(accr, feed_dict={x: batch_xs, y: batch_ys})
        test_acc = sess.run(accr, feed_dict={x: testimg, y: testlabel})
        print('Epoch: %03d/%03d cost: %.9f train_acc: %.3f test_acc: %.3f'
              % (epoch, training_epochs, avg_cost, train_acc, test_acc))

具體步驟與第一小結(jié)中的描述一致锣险,這里蹄皱,模型迭代50次,每次迭代應用隨機批處理的方式計算損失函數(shù),每次處理100條訓練數(shù)據(jù),其訓練過程如下:

Epoch: 000/050 cost: 1.176365508 train_acc: 0.860 test_acc: 0.851
Epoch: 005/050 cost: 0.440964549 train_acc: 0.900 test_acc: 0.895
Epoch: 010/050 cost: 0.383310327 train_acc: 0.870 test_acc: 0.904
Epoch: 015/050 cost: 0.357270292 train_acc: 0.890 test_acc: 0.909
Epoch: 020/050 cost: 0.341507422 train_acc: 0.950 test_acc: 0.913
Epoch: 025/050 cost: 0.330557244 train_acc: 0.880 test_acc: 0.914
Epoch: 030/050 cost: 0.322380775 train_acc: 0.900 test_acc: 0.915
Epoch: 035/050 cost: 0.315963900 train_acc: 0.920 test_acc: 0.917
Epoch: 040/050 cost: 0.310716868 train_acc: 0.930 test_acc: 0.918
Epoch: 045/050 cost: 0.306357458 train_acc: 0.870 test_acc: 0.919

總結(jié)

本人還是深度學習的入門漢舱卡,剛剛使用tensorflow,對其使用處于初步階段锻拘。總結(jié)搭建體會:tensorflow只需要手動處理神經(jīng)網(wǎng)絡的前向計算,對于后向和損失優(yōu)化的相關方法已經(jīng)封裝成相應的函數(shù)直接調(diào)用即可署拟,不失靈活的同時又很方便婉宰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市推穷,隨后出現(xiàn)的幾起案子心包,更是在濱河造成了極大的恐慌,老刑警劉巖馒铃,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟹腾,死亡現(xiàn)場離奇詭異,居然都是意外死亡区宇,警方通過查閱死者的電腦和手機娃殖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來议谷,“玉大人珊随,你說我怎么就攤上這事∈料叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵鲫凶,是天一觀的道長禀崖。 經(jīng)常有香客問我,道長螟炫,這世上最難降的妖魔是什么波附? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮昼钻,結(jié)果婚禮上掸屡,老公的妹妹穿的比我還像新娘。我一直安慰自己然评,他們只是感情好仅财,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碗淌,像睡著了一般盏求。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亿眠,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天碎罚,我揣著相機與錄音,去河邊找鬼纳像。 笑死荆烈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的竟趾。 我是一名探鬼主播憔购,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宫峦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倦始?” 一聲冷哼從身側(cè)響起斗遏,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞋邑,沒想到半個月后诵次,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡枚碗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年逾一,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肮雨。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡遵堵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怨规,到底是詐尸還是另有隱情陌宿,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布波丰,位于F島的核電站壳坪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掰烟。R本人自食惡果不足惜爽蝴,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纫骑。 院中可真熱鬧蝎亚,春花似錦、人聲如沸先馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤墙。三九已至缤底,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間番捂,已是汗流浹背个唧。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留设预,地道東北人徙歼。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魄梯。 傳聞我的和親對象是個殘疾皇子桨螺,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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