国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實(shí)戰(zhàn)篇:如何用Keras建立神經(jīng)網(wǎng)絡(luò)(附全部代碼)

hss01248 / 2625人閱讀

摘要:摘要機(jī)器學(xué)習(xí)實(shí)戰(zhàn)篇用簡(jiǎn)單的代碼打造屬于自己的神經(jīng)網(wǎng)絡(luò)模型是目前最受歡迎的深度學(xué)習(xí)庫(kù)之一,對(duì)人工智能的商業(yè)化做出了巨大貢獻(xiàn)。你學(xué)會(huì)了如何建立一個(gè)簡(jiǎn)單的六層神經(jīng)網(wǎng)絡(luò),可以預(yù)測(cè)電影評(píng)論的情感,其準(zhǔn)確率達(dá)到。

摘要: 機(jī)器學(xué)習(xí)實(shí)戰(zhàn)篇:用簡(jiǎn)單的代碼打造屬于自己的神經(jīng)網(wǎng)絡(luò)模型~

Keras是目前最受歡迎的深度學(xué)習(xí)庫(kù)之一,對(duì)人工智能的商業(yè)化做出了巨大貢獻(xiàn)。它使用起來非常簡(jiǎn)單,它使你能夠通過幾行代碼就可以構(gòu)建強(qiáng)大的神經(jīng)網(wǎng)絡(luò)。在這篇文章中,你將了解如何通過Keras構(gòu)建神經(jīng)網(wǎng)絡(luò),并且將用戶評(píng)論分為兩類:積極或消極來預(yù)測(cè)用戶評(píng)論的情感。這就是社交媒體所謂的情感分析,我們會(huì)用著名的imdb評(píng)論數(shù)據(jù)集來做。我們構(gòu)建的模型只需進(jìn)行一些更改,就可以應(yīng)用于其他機(jī)器學(xué)習(xí)問題。

請(qǐng)注意,我們不會(huì)深入Keras或深度學(xué)習(xí)的細(xì)節(jié),這對(duì)于想要進(jìn)入人工智能領(lǐng)域卻沒有深厚的數(shù)學(xué)功底的程序員來說是件好事。

目錄:

1.Keras是什么?

2.什么是情緒分析?

3.imdb數(shù)據(jù)集。

4.導(dǎo)入依賴關(guān)系并獲取數(shù)據(jù)。

5.探索數(shù)據(jù)。

6.數(shù)據(jù)準(zhǔn)備。

7.建立和訓(xùn)練模型。

Keras是什么?

Keras是一個(gè)開源的python庫(kù),可以讓你輕松構(gòu)建神經(jīng)網(wǎng)絡(luò)。該庫(kù)能夠在TensorFlow、Microsoft Cognitive Toolkit、Theano和MXNet上運(yùn)行。Tensorflow和Theano是Python中用來構(gòu)建深度學(xué)習(xí)算法的最常用的平臺(tái),但它們可能相當(dāng)復(fù)雜且難以使用。相比之下,Keras提供了一種簡(jiǎn)單方便的方法來構(gòu)建深度學(xué)習(xí)模型。它的創(chuàng)造者Fran?oisChollet開發(fā)了它,使人們能夠盡可能快速和簡(jiǎn)單地構(gòu)建神經(jīng)網(wǎng)絡(luò)。他專注于可擴(kuò)展性、模塊化、極簡(jiǎn)主義和python的支持。Keras可以與GPU和CPU一起使用,并支持Python 2和Python 3。Google Keras為深度學(xué)習(xí)和人工智能的商業(yè)化做出了巨大貢獻(xiàn),越來越多的人正在使用它們。

什么是情緒分析?

借助情感分析,我們想要確定例如演講者或作家對(duì)于文檔或事件的態(tài)度(例如情感)。因此,這是一個(gè)自然語言處理問題,需要理解文本,以預(yù)測(cè)潛在的意圖。情緒主要分為積極的,消極的和中立的類別。通過使用情緒分析,我們希望根據(jù)他撰寫的評(píng)論,預(yù)測(cè)客戶對(duì)產(chǎn)品的意見和態(tài)度。因此,情緒分析廣泛應(yīng)用于諸如評(píng)論,調(diào)查,文檔等等。

imdb數(shù)據(jù)集

imdb情緒分類數(shù)據(jù)集由來自imdb用戶的50,000個(gè)電影評(píng)論組成,標(biāo)記為positive(1)或negative(0)。評(píng)論是預(yù)處理的,每一個(gè)都被編碼為一個(gè)整數(shù)形式的單詞索引序列。評(píng)論中的單詞按照它們?cè)跀?shù)據(jù)集中的總體頻率進(jìn)行索引。例如,整數(shù)“2”編碼數(shù)據(jù)中第二個(gè)最頻繁的詞。50,000份評(píng)論分為25,000份訓(xùn)練和25,000份測(cè)試。該數(shù)據(jù)集由斯坦福大學(xué)的研究人員創(chuàng)建,并在2011年發(fā)表在一篇論文中,他們的準(zhǔn)確性達(dá)到了88.89%。它也被用在2011年Kaggle競(jìng)賽的“Bag of Words Meets Bags of Popcorn”方案中,并且取得了非常好的效果。

導(dǎo)入依賴關(guān)系并獲取數(shù)據(jù)

我們首先導(dǎo)入所需的依賴關(guān)系來預(yù)處理數(shù)據(jù)并構(gòu)建我們的模型。

%matplotlib inline 
import matplotlib 
import matplotlib.pyplot as plt
import numpy as np 
from keras.utils import to_categorical 
from keras import keras import models 
from keras import layers

我們繼續(xù)下載imdb數(shù)據(jù)集,幸好它已經(jīng)被內(nèi)置到Keras中。這樣我們就不用將他進(jìn)行5/5測(cè)試拆分,但我們也會(huì)在下載后立即將數(shù)據(jù)合并到數(shù)據(jù)和目標(biāo)中,以便稍后進(jìn)行80/20的拆分。

from keras.datasets import imdb
(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)
data = np.concatenate((training_data, testing_data), axis=0)
targets = np.concatenate((training_targets, testing_targets), axis=0)
探索數(shù)據(jù)

現(xiàn)在我們可以開始探索數(shù)據(jù)集了:

print("Categories:", np.unique(targets))
print("Number of unique words:", len(np.unique(np.hstack(data))))

Categories: [0 1]
Number of unique words: 9998
length = [len(i) for i in data]
print("Average Review length:", np.mean(length))
print("Standard Deviation:", round(np.std(length)))

Average Review length: 234.75892
Standard Deviation: 173.0

你可以在上面的輸出中看到數(shù)據(jù)集被標(biāo)記為兩個(gè)類別,分別代表0或1,表示評(píng)論的情感。整個(gè)數(shù)據(jù)集包含9998個(gè)獨(dú)特單詞,平均評(píng)論長(zhǎng)度為234個(gè)單詞,標(biāo)準(zhǔn)差為173個(gè)單詞。

現(xiàn)在我們來看一個(gè)訓(xùn)練樣例:

print("Label:", targets[0])

Label: 1
print(data[0])

[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670
, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50
, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 
515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16,
 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 
117, 5952, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381
, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 7486, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 5535, 18, 51, 
36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 5345,
 19, 178, 32]

在上方,你會(huì)看到標(biāo)記為肯定(1)的數(shù)據(jù)集評(píng)論。下面的代碼檢索字典映射詞索引回到原來的單詞,以便我們可以閱讀它們,它用“?!碧鎿Q每個(gè)未知的單詞。它可以通過使用get_word_index()函數(shù)來完成這一操作。

index = imdb.get_word_index()
reverse_index = dict([(value, key) for (key, value) in index.items()]) 
decoded = " ".join( [reverse_index.get(i - 3, "#") for i in data[0]] )
print(decoded) 

# this film was just brilliant casting location scenery story direction everyone"s really suited the part they played and you could 
just imagine being there robert # is an amazing actor and now the same being director # father came from the same scottish island as
 myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just 
brilliant so much that i bought the film as soon as it was released for # and would recommend it to everyone to watch and the fly 
fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and 
this definitely was also # to the two little boy"s that played the # of norman and paul they were just brilliant children are often 
left out of the # list i think because the stars that play them all grown up are such a big profile for the whole film but these 
children are amazing and should be praised for what they have done don"t you think the whole story was so lovely because it was 
true and was someone"s life after all that was shared with us all
數(shù)據(jù)準(zhǔn)備

現(xiàn)在是準(zhǔn)備我們的數(shù)據(jù)的時(shí)候了。我們將矢量化每個(gè)評(píng)論并填充零,以便它包含正好一萬個(gè)數(shù)字。這意味著我們用零填充每個(gè)比10,000短的評(píng)論。我們這樣做是因?yàn)榇蠖鄶?shù)的評(píng)論長(zhǎng)度差不多都在這個(gè)長(zhǎng)度,并且我們的神經(jīng)網(wǎng)絡(luò)的每次輸入都需要具有相同的大小。

def vectorize(sequences, dimension = 10000):
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1
return results
 
data = vectorize(data)
targets = np.array(targets).astype("float32")

現(xiàn)在我們將數(shù)據(jù)分成訓(xùn)練和測(cè)試集。訓(xùn)練集將包含40,000條評(píng)論,測(cè)試設(shè)置為10,000條。

test_x = data[:10000]
test_y = targets[:10000]
train_x = data[10000:]
train_y = targets[10000:]
建立和訓(xùn)練模型

我們現(xiàn)在可以建立我們簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)了,我們首先定義我們想要構(gòu)建的模型的類型。Keras中有兩種類型的模型可供使用:功能性API使用的Sequential模型和Model類。

然后我們只需添加輸入層,隱藏層和輸出層。在他們之間,我們使用dropout來防止過度擬合。請(qǐng)注意,你應(yīng)始終使用20%到50%之間的dropout。在每一層,我們使用“密集層”,這意味著單元完全連接。在隱藏層中,我們使用relu函數(shù),因?yàn)樗偸且粋€(gè)好的開始,并且在大多數(shù)情況下會(huì)產(chǎn)生令人滿意的結(jié)果,當(dāng)然你也可以隨意嘗試其他激活功能。在輸出層,我們使用sigmoid函數(shù),它將0和1之間的值進(jìn)行映射。請(qǐng)注意,我們?cè)谳斎雽訉⑤斎氪笮≡O(shè)置為10,000,因?yàn)槲覀兊脑u(píng)論長(zhǎng)度為10,000個(gè)整數(shù)。輸入層需要10,000個(gè)輸入,并以50的shape輸出。

最后,我們讓Keras打印我們剛剛構(gòu)建的模型的摘要。

# Input - Layer
model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))
# Hidden - Layers
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu")
model.add(layers.Dropout(0.2, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
# Output- Layer
model.add(layers.Dense(1, activation = "sigmoid"))model.summary()
model.summary()

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 50)                500050    
_________________________________________________________________
dropout_1 (Dropout)          (None, 50)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 50)                2550      
_________________________________________________________________
dropout_2 (Dropout)          (None, 50)                0         
_________________________________________________________________
dense_3 (Dense)              (None, 50)                2550      
_________________________________________________________________
dense_4 (Dense)              (None, 1)                 51        
=================================================================
Total params: 505,201
Trainable params: 505,201
Non-trainable params: 0
_________________________________________________________________

現(xiàn)在我們需要優(yōu)化我們的模型,這只不過是配置訓(xùn)練模型,我們使用“adam”優(yōu)化器。優(yōu)化器是在訓(xùn)練期間改變權(quán)重和偏差的算法。我們也選擇二進(jìn)制--交叉熵作為損失(因?yàn)槲覀兲幚矶M(jìn)制分類)和準(zhǔn)確性作為我們的評(píng)估指標(biāo)。

model.compile(
 optimizer = "adam",
 loss = "binary_crossentropy",
 metrics = ["accuracy"]
)

我們現(xiàn)在開始訓(xùn)練我們的模型,我們用batch_size為500來完成這件事,并且只對(duì)兩個(gè)epochs,因?yàn)槲艺J(rèn)識(shí)到如果我們訓(xùn)練它的時(shí)間越長(zhǎng),模型就會(huì)過度擬合。批量大小定義了將通過網(wǎng)絡(luò)傳播的樣本數(shù)量,一個(gè)epoch是對(duì)整個(gè)訓(xùn)練數(shù)據(jù)的迭代??偟膩碚f,批量大小可以加快訓(xùn)練速度,但并不總是快速收斂。較小的批量大小是訓(xùn)練速度較慢,但它可以更快地收斂。這絕對(duì)取決于問題性質(zhì),所以你需要嘗試一些不同的值。如果你第一次遇到問題,我建議你首先使用批量大小為32。

results = model.fit(
 train_x, train_y,
 epochs= 2,
 batch_size = 500,
 validation_data = (test_x, test_y)
)
Train on 40000 samples, validate on 10000 samples
Epoch 1/2
40000/40000 [==============================] - 5s 129us/step - loss: 0.4051 - acc: 0.8212 - val_loss: 0.2635 - val_acc: 0.8945
Epoch 2/2
40000/40000 [==============================] - 4s 90us/step - loss: 0.2122 - acc: 0.9190 - val_loss: 0.2598 - val_acc: 0.8950

現(xiàn)在是評(píng)估我們的模型的時(shí)候了:

print(np.mean(results.history["val_acc"]))

0.894750000536

真棒!有了這個(gè)簡(jiǎn)單的模型,我們已經(jīng)超過了我在開始時(shí)提到的2011年論文的準(zhǔn)確性。

你可以在下面看到整個(gè)模型的代碼:

import numpy as np
from keras.utils import to_categorical
from keras import models
from keras import layers
from keras.datasets import imdb
(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)
data = np.concatenate((training_data, testing_data), axis=0)
targets = np.concatenate((training_targets, testing_targets), axis=0)
def vectorize(sequences, dimension = 10000):
 results = np.zeros((len(sequences), dimension))
 for i, sequence in enumerate(sequences):
 results[i, sequence] = 1
 return results
 
test_x = data[:10000]
test_y = targets[:10000]
train_x = data[10000:]
train_y = targets[10000:]
model = models.Sequential()
# Input - Layer
model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))
# Hidden - Layers
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
model.add(layers.Dropout(0.2, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
# Output- Layer
model.add(layers.Dense(1, activation = "sigmoid"))
model.summary()
# compiling the model
model.compile(
 optimizer = "adam",
 loss = "binary_crossentropy",
 metrics = ["accuracy"]
)
results = model.fit(
 train_x, train_y,
 epochs= 2,
 batch_size = 500,
 validation_data = (test_x, test_y)
)
print("Test-Accuracy:", np.mean(results.history["val_acc"]))

總結(jié)
在本文中,你了解到了什么是情感分析的內(nèi)容,以及為什么Keras是最常用的深度學(xué)習(xí)庫(kù)之一。最重要的是,你了解到Keras對(duì)深度學(xué)習(xí)和人工智能的商業(yè)化做出了巨大貢獻(xiàn)。你學(xué)會(huì)了如何建立一個(gè)簡(jiǎn)單的六層神經(jīng)網(wǎng)絡(luò),可以預(yù)測(cè)電影評(píng)論的情感,其準(zhǔn)確率達(dá)到89%。現(xiàn)在,你可以使用此模型對(duì)其他文本來源進(jìn)行情感分析,但需要將其全部更改為10,000的長(zhǎng)度,或者更改輸入圖層的輸入大小。你也可以將此模型應(yīng)用于其他相關(guān)機(jī)器學(xué)習(xí)問題,只需進(jìn)行一些更改。

文章標(biāo)題《how-to-build-a-neural-network-with-keras》

作者:Niklas Donges

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/19725.html

相關(guān)文章

  • Keras 初探

    摘要:初探最近在接觸些深度學(xué)習(xí)的東西,也對(duì)一些深度學(xué)習(xí)的框架進(jìn)行了大致的了解。兩次參數(shù)的更新也有可能互相抵消掉,造成目標(biāo)函數(shù)震蕩的比較劇烈。損失函數(shù)該參數(shù)為模型試圖最小化的目標(biāo)函數(shù),它可為預(yù)定義的損失函數(shù)名,如,也可以為一個(gè)損失函數(shù)。 Keras 初探 最近在接觸些深度學(xué)習(xí)的東西,也對(duì)一些深度學(xué)習(xí)的框架進(jìn)行了大致的了解。Python的科學(xué)計(jì)算包主要是Theano和TensorFlow,特點(diǎn)就...

    KunMinX 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<