小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

TensorFlow入門教程 | Fundebug博客

 Fundebug 2018-07-21

摘要: 谷歌開源的AI開發(fā)工具TensorFlow,了解一下?



谷歌的AI技術(shù)獨(dú)步天下,從即將商業(yè)化運(yùn)營的無人駕駛汽車Waymo,到天下無敵的圍棋大師AlphaGo,再到以假亂真的電話助理Duplex

如果你想學(xué)習(xí)AI技術(shù)的話,神經(jīng)網(wǎng)絡(luò)是個(gè)不錯(cuò)的學(xué)習(xí)方向,因?yàn)樗亲钌衿嬉彩乾F(xiàn)在最有效的機(jī)器學(xué)習(xí)算法;如果你想學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的話,最好的起點(diǎn)是實(shí)現(xiàn)一個(gè)簡單的神經(jīng)網(wǎng)絡(luò),因?yàn)槟憧梢栽趯?shí)現(xiàn)的過程中發(fā)現(xiàn)問題,思考問題以及解決問題;如果你想實(shí)現(xiàn)一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)的話,本文將教你使用TensorFlow來實(shí)現(xiàn);至少,你可以直接運(yùn)行本文給出的例子,感受一下神經(jīng)網(wǎng)絡(luò)的神奇。

TensorFlow簡介

TensorFlow是谷歌開源的AI開發(fā)工具,可以用于實(shí)現(xiàn)普通的機(jī)器學(xué)習(xí)算法(linear regression,logistic regression),也可以用于實(shí)現(xiàn)深度學(xué)習(xí)算法(各種不同類型的神經(jīng)網(wǎng)絡(luò))。TensorFlow為深度學(xué)習(xí)進(jìn)行了大量優(yōu)化,使用TensorFlow提供的API,AI開發(fā)者能夠更加簡單地實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)算法。

鳶尾花分類

下圖是3種不同的鳶尾花,從左至右分別是setosa, virginica和versicolor。3種鳶尾花的花萼和花瓣的長寬各有不同。



iris_training.csv是訓(xùn)練數(shù)據(jù),它提供了120個(gè)鳶尾花的花萼和花瓣的長寬數(shù)據(jù),并且標(biāo)記了所屬的鳶尾花類別。

根據(jù)訓(xùn)練數(shù)據(jù),你可以總結(jié)出鳶尾花的花萼和花瓣的長寬與其所屬類別的關(guān)系嗎?120個(gè)數(shù)據(jù)不算太多,但是對(duì)人來說并不簡單。

在本文中,我們將使用TesorFlow訓(xùn)練一個(gè)簡單的神經(jīng)網(wǎng)絡(luò),來識(shí)別鳶尾花的類別。

代碼解釋

train.py訓(xùn)練神經(jīng)網(wǎng)絡(luò)的代碼:

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import os
import tensorflow as tf
import tensorflow.contrib.eager as tfe
from parse_csv import parse_csv

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
tf.enable_eager_execution()


# 導(dǎo)入訓(xùn)練數(shù)據(jù)
TRAIN_DATASET = tf.data.TextLineDataset("/tensorflow-101/data/iris_training.csv")
TRAIN_DATASET = TRAIN_DATASET.skip(1) # skip the first header row
TRAIN_DATASET = TRAIN_DATASET.map(parse_csv) # parse each row
TRAIN_DATASET = TRAIN_DATASET.shuffle(buffer_size=1000) # randomize
TRAIN_DATASET = TRAIN_DATASET.batch(32)


# 定義神經(jīng)網(wǎng)絡(luò)
MODEL = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation="relu", input_shape=(4,)), # input shape required
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(3)
])


# 損失計(jì)算函數(shù)
def loss(model, x, y):
y_ = model(x)
return tf.losses.sparse_softmax_cross_entropy(labels=y, logits=y_)


# 梯度計(jì)算函數(shù)
def grad(model, inputs, targets):
with tf.GradientTape() as tape:
loss_value = loss(model, inputs, targets)
return tape.gradient(loss_value, MODEL.variables)


# 優(yōu)化器
OPTIMIZER = tf.train.GradientDescentOptimizer(learning_rate=0.01)


def train():

print("訓(xùn)練:")

num_epochs = 201

for epoch in range(num_epochs):

epoch_loss_avg = tfe.metrics.Mean()
epoch_accuracy = tfe.metrics.Accuracy()

for x, y in TRAIN_DATASET:

# 計(jì)算梯度
grads = grad(MODEL, x, y)

# 優(yōu)化模型的參數(shù)
OPTIMIZER.apply_gradients(zip(grads, MODEL.variables), global_step=tf.train.get_or_create_global_step())

# 計(jì)算損失
epoch_loss_avg(loss(MODEL, x, y))

# 計(jì)算準(zhǔn)確度
epoch_accuracy(tf.argmax(MODEL(x), axis=1, output_type=tf.int32), y)

if epoch % 50 == 0:
print("Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}".format(epoch, epoch_loss_avg.result(), epoch_accuracy.result()))

return MODEL

由代碼可知,從導(dǎo)入訓(xùn)練數(shù)據(jù),到定義神經(jīng)網(wǎng)絡(luò)模型的層數(shù)以及激勵(lì)函數(shù),再到定義損失計(jì)算函數(shù)、梯度計(jì)算函數(shù)和優(yōu)化器,都使用了TensorFlow提供的API。這樣,開發(fā)者不再需要去實(shí)現(xiàn)底層的細(xì)節(jié),可以根據(jù)需要靈活地調(diào)整神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)以及所使用的各種函數(shù)。

其中,定義神經(jīng)網(wǎng)絡(luò)的代碼如下:

MODEL = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation="relu", input_shape=(4,)),
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(3)
])

可知,這是一個(gè)4層的神經(jīng)網(wǎng)絡(luò),包含1個(gè)輸入層,2個(gè)隱藏層和1個(gè)輸出層,2個(gè)隱藏層都有10個(gè)神經(jīng)元,使用RELU作為激勵(lì)函數(shù),如下圖所示:



訓(xùn)練代碼最核心的是部分train函數(shù):

def train():

print("訓(xùn)練:")

num_epochs = 201

for epoch in range(num_epochs):

epoch_loss_avg = tfe.metrics.Mean()
epoch_accuracy = tfe.metrics.Accuracy()

for x, y in TRAIN_DATASET:

# 計(jì)算梯度
grads = grad(MODEL, x, y)

# 優(yōu)化模型的參數(shù)
OPTIMIZER.apply_gradients(zip(grads, MODEL.variables), global_step=tf.train.get_or_create_global_step())

# 計(jì)算損失
epoch_loss_avg(loss(MODEL, x, y))

# 計(jì)算準(zhǔn)確度
epoch_accuracy(tf.argmax(MODEL(x), axis=1, output_type=tf.int32), y)

if epoch % 50 == 0:
print("Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}".format(epoch, epoch_loss_avg.result(), epoch_accuracy.result()))

return MODEL

train函數(shù)的算法是這樣的:

  • 迭代計(jì)算200個(gè)epoch,每一個(gè)epoch迭代都會(huì)掃描整個(gè)訓(xùn)練數(shù)據(jù)集;
  • 每個(gè)epoch中,會(huì)iterate整個(gè)訓(xùn)練數(shù)據(jù)集中的120個(gè)樣本,其batch size為32,所以一個(gè)epoch需要4個(gè)iteration;
  • 每個(gè)iteration中,根據(jù)樣本的特征值(花萼和花瓣的長寬),使用神經(jīng)網(wǎng)絡(luò)做出預(yù)測(所屬鳶尾花類別),與真實(shí)的標(biāo)記值進(jìn)行比較,計(jì)算損失及梯度。
  • 每個(gè)iteration中,根據(jù)所計(jì)算的梯度,使用優(yōu)化器修改神經(jīng)網(wǎng)絡(luò)中的參數(shù)值。
  • 經(jīng)過200個(gè)epoch,神經(jīng)網(wǎng)絡(luò)中的參數(shù)將會(huì)調(diào)整到最優(yōu)值,使得其預(yù)測結(jié)果誤差最低。

基于Docker運(yùn)行TensorFlow

將TensorFlow以及代碼都打包到Docker鏡像中,就可以在Docker容器中運(yùn)行TensorFlow。這樣,開發(fā)者僅需要安裝Docker,而不需要安裝TensorFlow;同時(shí),Docker保證了代碼一定可以在任何Docker主機(jī)上正確執(zhí)行,因?yàn)樗蕾嚨倪\(yùn)行環(huán)境全部打包在Docker鏡像中。Docker鏡像使用Dockerfile定義。

克隆代碼

git clone https://github.com/Fundebug/tensorflow-101.git
cd tensorflow-101

構(gòu)建鏡像

sudo docker build -t tensorflow .

運(yùn)行容器

sudo docker run -i tensorflow python src/main.py

運(yùn)行結(jié)果

訓(xùn)練:
Epoch 000: Loss: 1.142, Accuracy: 29.167%
Epoch 050: Loss: 0.569, Accuracy: 78.333%
Epoch 100: Loss: 0.304, Accuracy: 95.833%
Epoch 150: Loss: 0.186, Accuracy: 97.500%
Epoch 200: Loss: 0.134, Accuracy: 98.333%

測試:
Test set accuracy: 96.667%

預(yù)測:
Example 0 prediction: Iris setosa
Example 1 prediction: Iris versicolor
Example 2 prediction: Iris virginica

由結(jié)果可知,對(duì)于測試數(shù)據(jù)集iris_test.csv,所訓(xùn)練的神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確率高達(dá)96.667%,是不是很神奇呢?

參考




版權(quán)聲明:
轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog./2018/06/06/tensorflow-101/

您的用戶遇到BUG了嗎?

體驗(yàn)Demo 免費(fèi)使用

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多