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

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

0

TensorFlow 2入門指南,初學者必備!

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

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

英語原文:Getting Started with TensorFlow 2

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


什么是Tensorflow?

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

TensorFlow 2入門指南,初學者必備!

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

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

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

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

導入和理解數(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)在,我們必須導入其他重要的庫,這將有助于我們創(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中導入了2個主要的東西,分別是Dense和Sequential。 從tensorflow.keras.layers導入的Dense是緊密連接的一種層。 密集連接的層意味著先前層的所有節(jié)點都連接到當前層的所有節(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入門指南,初學者必備!

X.head()

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

同樣對于目標,

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


TensorFlow 2入門指南,初學者必備!

y.head()

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

y.irisType.value_counts()


TensorFlow 2入門指南,初學者必備!

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

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


TensorFlow 2入門指南,初學者必備!

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

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

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

  • 填入缺失值

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

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

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

缺失值

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

X.info()


TensorFlow 2入門指南,初學者必備!

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

分割為訓練集和測試集

為了將數(shù)據(jù)集分割為訓練集和測試集,我們可以使用先前已經(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ù)的標準化

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

X_train.var(), X_test.var()


TensorFlow 2入門指南,初學者必備!

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

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

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

這種表示方式的問題在于,我們的模型可能會賦予越高的數(shù)字更高的優(yōu)先級,這可能會導致結(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入門指南,初學者必備!

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

最后一件事

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

X_train = X_train.values

X_test = X_test.values

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

X_train[0]


TensorFlow 2入門指南,初學者必備!

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

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

機器學習模型

現(xiàn)在,我們終于準備好創(chuàng)建我們的模型并對其進行訓練。 我們將從一個簡單的模型開始,然后我們將轉(zhuǎn)到復雜的模型結(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)心訓練示例的數(shù)量。 相反,我們只關(guān)心功能的數(shù)量。 因此,我們傳入任何訓練示例的形狀,在我們的示例中,它是(4,)在input_Shape內(nèi)。

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

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

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

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

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

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

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

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

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

fit返回一個回調(diào),其中包含我們訓練的所有歷史記錄,我們可以使用它來執(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ù)來分析我們的訓練。 使用800個epoch將過度擬合數(shù)據(jù),這意味著它將在訓練數(shù)據(jù)上執(zhí)行得非常好,但在測試數(shù)據(jù)上則不會。

當模型進行訓練時,我們可以看到我們在訓練集和驗證集上的損失和準確性。

TensorFlow 2入門指南,初學者必備!

在此,我們可以看到,訓練集上的準確率是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入門指南,初學者必備!

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

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

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入門指南,初學者必備!

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

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

model1.evaluate(X_test, y_test)


TensorFlow 2入門指南,初學者必備!

這樣,我們就可看到模型的準確率為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入門指南,初學者必備!

你猜怎么著? 通過加入正則化和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入門指南,初學者必備! 

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入門指南,初學者必備!

洞見

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


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

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

知情人士

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