丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

TensorFlow 2入門指南,初學(xué)者必備!

本文作者: AI研習(xí)社-譯站 2020-08-14 14:42
導(dǎo)語:TensorFlow是谷歌推出的深度學(xué)習(xí)框架,于2019年發(fā)布第二版,被行業(yè)專家和研究人員廣泛使用。本文將通過實例演練,帶你了解TensorFlow的最新版本。

字幕組雙語原文:TensorFlow 2入門指南,初學(xué)者必備!

英語原文:Getting Started with TensorFlow 2

翻譯:雷鋒字幕組(赟瑾和鳴、大表哥


什么是Tensorflow?

TensorFlow是谷歌推出的深度學(xué)習(xí)框架,于2019年發(fā)布了第二版。 它是世界上最著名的深度學(xué)習(xí)框架之一,被行業(yè)專家和研究人員廣泛使用。

TensorFlow 2入門指南,初學(xué)者必備!

Tensorflow v1難以使用和理解,因為它的Pythonic較少,但是隨著Keras發(fā)行的v2現(xiàn)在與Tensorflow.keras完全同步,它易于使用,易學(xué)且易于理解。

請記住,這不是有關(guān)深度學(xué)習(xí)的文章,所以我希望您了解深度學(xué)習(xí)的術(shù)語及其背后的基本思想。

我們將使用非常著名的數(shù)據(jù)集IRIS數(shù)據(jù)集探索深度學(xué)習(xí)的世界。

廢話不多說,我們直接看看代碼。

導(dǎo)入和理解數(shù)據(jù)集

from sklearn.datasets import load_iris

iris = load_iris()

現(xiàn)在,這個  iris 是一個字典。 我們可以使用下面的代碼查看鍵值

>>> iris.keys()

dict_keys([‘data’, ‘target’, ‘frame’, ‘target_names’, ‘DESCR’, ‘feature_names’, ‘filename’])

因此,我們的數(shù)據(jù)在 data  鍵中,目標在  targe 鍵中,依此類推。 如果要查看此數(shù)據(jù)集的詳細信息,可以使用  iris[ ['DESCR']。

現(xiàn)在,我們必須導(dǎo)入其他重要的庫,這將有助于我們創(chuàng)建神經(jīng)網(wǎng)絡(luò)。

from sklearn.model_selection import train_test_split #to split data

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import tensorflow as tf

from tensorflow.keras.layers import Dense

from tensorflow.keras.models import Sequential

在這里,我們從tensorflow中導(dǎo)入了2個主要的東西,分別是Dense和Sequential。 從tensorflow.keras.layers導(dǎo)入的Dense是緊密連接的一種層。 密集連接的層意味著先前層的所有節(jié)點都連接到當(dāng)前層的所有節(jié)點。

Sequential是Keras的API,通常稱為Sequential API,我們將使用它來構(gòu)建神經(jīng)網(wǎng)絡(luò)。

為了更好地理解數(shù)據(jù),我們可以將其轉(zhuǎn)換為數(shù)據(jù)幀。 我們開始做吧。

X = pd.DataFrame(data = iris.data, columns = iris.feature_names)

print(X.head())


TensorFlow 2入門指南,初學(xué)者必備!

X.head()

請注意,這里我們設(shè)置了column = iris.feature_names,其中feature_names是具有所有4個特征名稱的鍵。

同樣對于目標,

y = pd.DataFrame(data=iris.target, columns = [‘irisType’])


TensorFlow 2入門指南,初學(xué)者必備!

y.head()

要查看目標集合中的類數(shù)量,我們可以使用

y.irisType.value_counts()


TensorFlow 2入門指南,初學(xué)者必備!

這里我們可以看到我們有3個類,每個類都有標簽0、1和2。

iris.target_names #它是iris詞典的鍵值


TensorFlow 2入門指南,初學(xué)者必備!

這些是我們必須預(yù)測的類名稱。

機器學(xué)習(xí)的數(shù)據(jù)預(yù)處理

目前,機器學(xué)習(xí)的第一步就是數(shù)據(jù)預(yù)處理。數(shù)據(jù)預(yù)處理的主要步驟是:

  • 填入缺失值

  • 將數(shù)據(jù)分割成為訓(xùn)練集以及驗證集

  • 對數(shù)據(jù)進行標準化處理

  • 將類別性數(shù)據(jù)轉(zhuǎn)換成為獨熱向量

缺失值

為了檢查是否存在缺失值,我們可以用pandas.DataFrame.info()來進行檢查工作。

X.info()


TensorFlow 2入門指南,初學(xué)者必備!

這樣我們就可以看到我們(很幸運地)沒有缺失值,并且所有特征都是float64格式的。

分割為訓(xùn)練集和測試集

為了將數(shù)據(jù)集分割為訓(xùn)練集和測試集,我們可以使用先前已經(jīng)引入過的sklearn.model_selection中的train_test_split。

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.1)

其中test_size是一種聲明,它說明我們希望整個數(shù)據(jù)集的10%被用來做為測試數(shù)據(jù)。

數(shù)據(jù)的標準化

一般情況下,當(dāng)數(shù)據(jù)的偏差非常大的時候,我們會對數(shù)據(jù)進行標準化。為了查看偏差值,我們可以使用pandas.DataFrame中的var()函數(shù)來檢查所有列的偏差值。

X_train.var(), X_test.var()


TensorFlow 2入門指南,初學(xué)者必備!

 這樣我們便可以看到,X_train和X_test的偏差值都非常低,因此無需對數(shù)據(jù)進行標準化。

將分類數(shù)據(jù)轉(zhuǎn)換為一個獨熱向量

因為我們知道我們的輸出數(shù)據(jù)是已經(jīng)使用iris.target_name檢查過的3個類之一,所以好消息是,當(dāng)我們加載目標時,它們已經(jīng)是0、1、2格式,其中0=1類,1=2類,依此類推。

這種表示方式的問題在于,我們的模型可能會賦予越高的數(shù)字更高的優(yōu)先級,這可能會導(dǎo)致結(jié)果有偏差。 因此,為了解決這個問題,我們將使用單熱點表示法。 你可以在這里了解更多關(guān)于一個熱門載體的信息。 我們可以使用內(nèi)置的KERS TO_CATEGRICAL,也可以使用skLearn中的OneHotEncoding。 我們將使用to_classical。

y_train = tf.keras.utils.to_categorical(y_train)

y_test = tf.keras.utils.to_categorical(y_test)

我們將只檢查前5行,以檢查它是否已正確轉(zhuǎn)換。

y_train[:5,:]


TensorFlow 2入門指南,初學(xué)者必備!

 是的,我們已經(jīng)把它轉(zhuǎn)換成了獨熱的表達方式。

最后一件事

我們可以做的最后一件事是將我們的數(shù)據(jù)轉(zhuǎn)換回Numpy數(shù)組,這樣我們就可以使用一些額外的函數(shù),這些函數(shù)將在稍后的模型中對我們有所幫助。 要做到這一點,我們可以使用

X_train = X_train.values

X_test = X_test.values

讓我們看看第一個訓(xùn)練示例的結(jié)果是什么。

X_train[0]


TensorFlow 2入門指南,初學(xué)者必備!

在這里,我們可以看到第一個訓(xùn)練示例中4個特征的值,它的形狀是(4),

當(dāng)我們在它們上使用to_Category時,我們的目標標簽已經(jīng)是數(shù)組格式。

機器學(xué)習(xí)模型

現(xiàn)在,我們終于準備好創(chuàng)建我們的模型并對其進行訓(xùn)練。 我們將從一個簡單的模型開始,然后我們將轉(zhuǎn)到復(fù)雜的模型結(jié)構(gòu),在那里我們將介紹Keras中的不同技巧和技術(shù)。

讓我們對我們的基本模型進行編碼

model1 = Sequential() #Sequential Object

首先,我們必須創(chuàng)建一個Sequential對象。 現(xiàn)在,要創(chuàng)建一個模型,我們所要做的就是根據(jù)我們的選擇添加不同類型的層。 我們將制作一個10層的Dense層模型,這樣我們就可以觀察到過擬合,并在以后通過不同的正則化技術(shù)來減少它。

model1.add( Dense( 64, activation = 'relu', input_shape= X_train[0].shape))

model1.add( Dense (128, activation = 'relu')

model1.add( Dense (128, activation = 'relu')

model1.add( Dense (128, activation = 'relu')

model1.add( Dense (128, activation = 'relu')

model1.add( Dense (64, activation = 'relu')

model1.add( Dense (64, activation = 'relu')

model1.add( Dense (64, activation = 'relu')

model1.add( Dense (64, activation = 'relu')

model1.add( Dense (3, activation = 'softmax')

請注意,在我們的第一層中,我們使用了一個額外的參數(shù)INPUT_Shape。 此參數(shù)指定第一層的尺寸。 在這種情況下,我們不關(guān)心訓(xùn)練示例的數(shù)量。 相反,我們只關(guān)心功能的數(shù)量。 因此,我們傳入任何訓(xùn)練示例的形狀,在我們的示例中,它是(4,)在input_Shape內(nèi)。

請注意,我們在輸出層中使用了Softmax(激活函數(shù)),因為它是一個多類分類問題。 如果這是一個二進制分類問題,我們會使用Sigmoid激活函數(shù)。

我們可以傳入任何我們想要的激活函數(shù),如Sigmoid或linear或tanh,但實驗證明relu在這類模型中表現(xiàn)最好。

現(xiàn)在,當(dāng)我們定義了模型的形狀后,下一步是指定它的損耗、優(yōu)化器和度量。 我們在keras中使用Compile方法指定這些參數(shù)。

model1.compile(optimizer='adam', loss= 'categorical_crossentropy', metrics = ['acc'])

在這里,我們可以使用任何優(yōu)化器,如隨機梯度下降、RMSProp等,但我們將使用Adam。

我們在這里使用CATEGRICAL_CROSENTROPY是因為我們有一個多類分類問題,如果我們有一個二進制分類問題,我們將使用BINARY_CROSENTROPY。

衡量標準對于評估一個人的模型是很重要的。 我們可以根據(jù)不同的度量標準來評估我們的模型。 對于分類問題,最重要的衡量標準是準確度,它表明我們的預(yù)測有多準確。

我們模型的最后一步是將其匹配到訓(xùn)練數(shù)據(jù)和訓(xùn)練標簽上。 讓我們對它進行編碼。

history = model1.fit(X_train, y_train, batch_size = 40, epochs=800, validation_split = 0.1

fit返回一個回調(diào),其中包含我們訓(xùn)練的所有歷史記錄,我們可以使用它來執(zhí)行不同的有用任務(wù),如繪圖等。

歷史回調(diào)有一個名為history的屬性,我們可以將其作為history.history進行訪問,這是一個包含所有損失和指標歷史的字典,即,在我們的示例中,它具有Loss、Acc、val_loses和val_acc的歷史記錄,并且我們可以將每個單獨的歷史記錄作為 history.history.loss 或  history.history['val_acc']  等進行訪問。

我們有一個指定的epoch數(shù)為800,batch大小為40,驗證拆分為0.1,這意味著我們現(xiàn)在有10%的驗證數(shù)據(jù),我們將使用這些數(shù)據(jù)來分析我們的訓(xùn)練。 使用800個epoch將過度擬合數(shù)據(jù),這意味著它將在訓(xùn)練數(shù)據(jù)上執(zhí)行得非常好,但在測試數(shù)據(jù)上則不會。

當(dāng)模型進行訓(xùn)練時,我們可以看到我們在訓(xùn)練集和驗證集上的損失和準確性。

TensorFlow 2入門指南,初學(xué)者必備!

在此,我們可以看到,訓(xùn)練集上的準確率是100%,驗證集上的準確率則為67%,這對于這樣一個模型來說已經(jīng)很出色了。接下來就讓我們畫出圖像。

plt.plot(history.history['acc'])

plt.plot(history.history['val_acc'])

plt.xlabel('Epochs')

plt.ylabel('Acc')

plt.legend(['Training', 'Validation'], loc='upper right')


TensorFlow 2入門指南,初學(xué)者必備!

 我們可以很清楚地看到,訓(xùn)練集上的準確率要比驗證集上高得多了。

類似地,我們用如下方法畫出損失:

plt.plot(history.history['loss'])

plt.plot(history.history['val_loss'])

plt.xlabel('Epochs')

plt.ylabel('Loss')

plt.legend(['Training', 'Validation'], loc='upper left')


TensorFlow 2入門指南,初學(xué)者必備!

在此,我們可以很清楚地看到,驗證集上的損失比訓(xùn)練集上要大得多了,這是因為數(shù)據(jù)被過擬合了。

為了看看模型的表現(xiàn)是不是好,我們可以使用model.evaluate來查看。我們要將數(shù)據(jù)和標簽放入評估函數(shù)中。

model1.evaluate(X_test, y_test)


TensorFlow 2入門指南,初學(xué)者必備!

這樣,我們就可看到模型的準確率為88%,這對于一個過擬合的模型來說已經(jīng)很好了。  

正則化

讓我們通過將正則化添加到我們的模型中來使它變得更好。 正則化將減少我們模型的過度擬合,并將改進我們的模型。

我們將在我們的模型中添加L2正則化。 單擊 此處了解有關(guān)L2正則化的更多信息。 要在我們的模型中添加L2正則化,我們必須指定要添加正則化的層,并給出一個附加參數(shù)kernel_Regularizer,然后傳遞tf.keras.Regularizers.l2()。

我們還將在我們的模型中實現(xiàn)一些dropout,這將幫助我們更好地減少過擬合,從而獲得更好的性能。 要閱讀更多關(guān)于dropout背后的理論和動機,請參閱這篇文章。

讓我們重新定義這個模型吧。

model2 = Sequential()

model2.add(Dense(64, activation = 'relu', input_shape= X_train[0].shape))

model2.add( Dense(128, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add( Dense (128, activation = 'relu',kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add(tf.keras.layers.Dropout(0.5)

model2.add( Dense (128, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add(Dense(128, activation = 'relu', kernel_regularizer = tf.keras.regularizers.l2(0.001)

))

model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add(tf.keras.layers.Dropout(0.5)

model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

model2.add( Dense (3, activation = 'softmax', kernel_regularizer=tf.keras.regularizers.l2(0.001)

))

如果你仔細觀察,我們所有的層和參數(shù)都是一樣的,除了我們在每個dense層中增加了2個dropout層和正則化。

我們將保留所有其他東西(損失、優(yōu)化器、epoch等)一樣。

model2.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])

history2 = model2.fit(X_train, y_train, epochs=800, validation_split=0.1, batch_size=40)

現(xiàn)在讓我們評估一下模型。

TensorFlow 2入門指南,初學(xué)者必備!

你猜怎么著? 通過加入正則化和dropout層,我們的準確率從88%提高到94%。 如果我們增加了BN層,它將會進一步改善。

讓我們把它畫出來。

準確率

plt.plot(history2.history['acc'])

plt.plot(history2.history['val_acc'])

plt.title('Accuracy vs. epochs')

plt.ylabel('Acc')

plt.xlabel('Epoch')

plt.legend(['Training', 'Validation'], loc='lower right')

plt.show()


TensorFlow 2入門指南,初學(xué)者必備! 

plt.plot(history2.history['loss'])

plt.plot(history2.history['val_loss'])

plt.title('Loss vs. epochs')

plt.ylabel('Loss')

plt.xlabel('Epoch')

plt.legend(['Training', 'Validation'], loc='upper right')

plt.show()



TensorFlow 2入門指南,初學(xué)者必備!

洞見

如此一來,我們就非常成功地改善了模型的過擬合,并且將模型準確率提升了幾乎6%,這對于一個小數(shù)據(jù)集來說是很好的改善。


雷鋒字幕組是由AI愛好者組成的志愿者翻譯團隊;團隊成員有大數(shù)據(jù)專家、算法工程師、圖像處理工程師、產(chǎn)品經(jīng)理、產(chǎn)品運營、IT咨詢?nèi)恕⒃谛熒?;志愿者們來自IBM、AVL、Adobe、阿里、百度等知名企業(yè),北大、清華、港大、中科院、南卡羅萊納大學(xué)、早稻田大學(xué)等海內(nèi)外高校研究所。

了解字幕組請聯(lián)系微信:tlacttlact

轉(zhuǎn)載請聯(lián)系字幕組微信并注明出處:雷鋒字幕組

雷鋒網(wǎng)雷鋒網(wǎng)

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

TensorFlow 2入門指南,初學(xué)者必備!

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識,讓語言不再成為學(xué)習(xí)知識的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說