迴圈神經網路之embedding,padding,模型構建與訓練
本文將介紹:
迴圈神經網路之embedding
迴圈神經網路之padding
迴圈神經網路之模型構建與訓練
一,從keras資料集imdb中載入影評資料並檢視
1,從keras資料集imdb中載入影評資料
# 1,從keras資料集imdb中載入影評資料
imdb = keras.datasets.imdb
vocab_size = 10000 # 出現詞頻由高到低, 擷取前10000個片語,其餘按特殊字元處理
index_from = 3 # 擷取的單詞和對應索引,向後平移3個單位
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
num_words = vocab_size, index_from = index_from) # 載入資料
2,檢視資料集和label標籤資料
# 2,檢視資料集和label標籤資料
print(train_data[0], train_labels[0])
print(train_data.shape, train_labels.shape)
print(len(train_data[0]), len(train_data[1]))
3,檢視測試集資料
# 3,檢視測試集資料
print(test_data, test_labels)
print(test_data.shape, test_labels.shape)
二,拿到資料集索引和文字的對應關係並做預處理
1,拿到資料集索引和文字的對應關係
# 1,拿到資料集索引和文字的對應關係
word_index = imdb.get_word_index()
print(len(word_index))
2,將資料集索引和文字的對應關係中的索引平移3個單位
# 2,將資料集索引和文字的對應關係中的索引平移3個單位
word_index = {k:(v+index_from) for k, v in word_index.items()}
3,將平移後空置出的3個位置寫入數值
# 3,將平移後空置出的3個位置寫入數值
word_index[''] = 0
word_index[''] = 1
word_index[''] = 2
word_index[''] = 3
4,翻轉資料集索引和文字的對應關係
# 4,翻轉資料集索引和文字的對應關係
reverse_word_index = dict(
[(value, key) for key, value in word_index.items()])
5,隨意取出一條資料測試效果
# 5,隨意取出一條資料測試效果
def decode_review(text_ids):
return ' '.join(
[reverse_word_index.get(word_id, "") for word_id in text_ids])
decode_review(train_data[1])
三,對訓練集,測試集做預處理處理
1,對訓練集資料做預處理處理
# 1,對訓練集資料做預處理處理
train_data = keras.preprocessing.sequence.pad_sequences(
train_data, # list of list
value = word_index[''], # 超出最大值的部分需填充的資料
padding = 'post', # post:在後填充; pre:在前填充
maxlen = max_length) # 處理段落的最大值 -若超出則階段;若不足則填充;
2,測試集資料做預處理處理
# 2,測試集資料做預處理處理
test_data = keras.preprocessing.sequence.pad_sequences(
test_data, # list of list
value = word_index[''],# 超出最大值的部分需填充的資料
padding = 'post', # post:在後填充; pre:在前填充
maxlen = max_length)
四,定義模型
embedding_dim = 16 # 每個word都embedding為一個長度為16的向量
batch_size = 128
model = keras.models.Sequential([
# 1. 定義一個矩陣:define matrix: [vocab_size, embedding_dim]
# 2. [1,2,3,4..], max_length * embedding_dim
# 3. batch_size * max_length * embedding_dim
keras.layers.Embedding(vocab_size, embedding_dim,trainable=True,# 此處如果是已訓練好的,trainable=False
input_length = max_length),
# batch_size * max_length * embedding_dim
# -> batch_size * embedding_dim
keras.layers.GlobalAveragePooling1D(),
# keras.layers.Flatten(), # 可以使用展平,後接入全連線層
keras.layers.Dense(64, activation = 'relu',kernel_regularizer=regularizers.l2(0.01)),
keras.layers.Dense(1, activation = 'sigmoid'),
])
model.summary()
model.compile(optimizer = 'adam', loss = 'binary_crossentropy',
metrics = ['accuracy'])
注意:
使用已經預訓練好的的embedding層,可以致參trainable = False
五,訓練模型
history = model.fit(train_data, train_labels,
epochs = 30,
batch_size = batch_size,
validation_split = 0.2)
六,列印模型訓練曲線
def plot_learning_curves(history, label, epochs, min_value, max_value):
data = {}
data[label] = history.history[label]
data['val_'+label] = history.history['val_'+label]
pd.DataFrame(data).plot(figsize=(8, 5))
plt.grid(True)
plt.axis([0, epochs, min_value, max_value])
plt.show()
plot_learning_curves(history, 'accuracy', 10, 0, 1)
plot_learning_curves(history, 'loss', 10, 0, 1)
七,估計器預測測試資料集準確率
# 七,估計器預測測試資料集準確率
model.evaluate(
test_data, test_labels,
batch_size = batch_size,
verbose = 0)
八,總結程式碼
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import regularizers
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
# 一,從keras資料集imdb中載入影評資料並檢視
# 1,從keras資料集imdb中載入影評資料
imdb = keras.datasets.imdb
vocab_size = 10000 # 出現詞頻由高到低, 擷取前10000個片語,其餘按特殊字元處理
index_from = 3 # 擷取的單詞和對應索引,向後平移3個單位
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
num_words = vocab_size, index_from = index_from) # 載入資料
# 2,檢視資料集和label標籤資料
print(train_data[0], train_labels[0])
print(train_data.shape, train_labels.shape)
print(len(train_data[0]), len(train_data[1]))
# 3,檢視測試集資料
print(test_data, test_labels)
print(test_data.shape, test_labels.shape)
# 二,拿到資料集索引和文字的對應關係並做預處理
# 1,拿到資料集索引和文字的對應關係
word_index = imdb.get_word_index()
print(len(word_index))
# 2,將資料集索引和文字的對應關係中的索引平移3個單位
word_index = {k:(v+index_from) for k, v in word_index.items()}
# 3,將平移後空置出的3個位置寫入數值
word_index[''] = 0 大連做人流多少錢
word_index[''] = 1
word_index[''] = 2
word_index[''] = 3
# 4,翻轉資料集索引和文字的對應關係
reverse_word_index = dict(
[(value, key) for key, value in word_index.items()])
# 5,隨意取出一條資料測試效果
def decode_review(text_ids):
return ' '.join(
[reverse_word_index.get(word_id, "") for word_id in text_ids])
decode_review(train_data[1])
# 三,對訓練集,測試集做預處理處理
max_length = 500 # 處理段落的最大值
# 1,對訓練集資料做預處理處理
train_data = keras.preprocessing.sequence.pad_sequences(
train_data, # list of list
value = word_index[''], # 超出最大值的部分需填充的資料
padding = 'post', # post:在後填充; pre:在前填充
maxlen = max_length) # 處理段落的最大值 -若超出則階段;若不足則填充;
# 2,測試集資料做預處理處理
test_data = keras.preprocessing.sequence.pad_sequences(
test_data, # list of list
value = word_index[''],# 超出最大值的部分需填充的資料
padding = 'post', # post:在後填充; pre:在前填充
maxlen = max_length)
# 3,列印處理後的資料
print(train_data[0])
# 四,定義模型
embedding_dim = 16 # 每個word都embedding為一個長度為16的向量
batch_size = 128
model = keras.models.Sequential([
# 1. 定義一個矩陣:define matrix: [vocab_size, embedding_dim]
# 2. [1,2,3,4..], max_length * embedding_dim
# 3. batch_size * max_length * embedding_dim
keras.layers.Embedding(vocab_size, embedding_dim,
input_length = max_length),
# batch_size * max_length * embedding_dim
# -> batch_size * embedding_dim
keras.layers.GlobalAveragePooling1D(),
# keras.layers.Flatten(), # 可以使用展平,後接入全連線層
keras.layers.Dense(64, activation = 'relu',kernel_regularizer=regularizers.l2(0.01)),
keras.layers.Dense(1, activation = 'sigmoid'),
])
model.summary()
model.compile(optimizer = 'adam', loss = 'binary_crossentropy',
metrics = ['accuracy'])
# 五,訓練模型
history = model.fit(train_data, train_labels,
epochs = 30,
batch_size = batch_size,
validation_split = 0.2)
# 六,列印模型訓練曲線
def plot_learning_curves(history, label, epochs, min_value, max_value):
data = {}
data[label] = history.history[label]
data['val_'+label] = history.history['val_'+label]
pd.DataFrame(data).plot(figsize=(8, 5))
plt.grid(True)
plt.axis([0, epochs, min_value, max_value])
plt.show()
plot_learning_curves(history, 'accuracy', 10, 0, 1)
plot_learning_curves(history, 'loss', 10, 0, 1)
# 七,估計器預測測試資料集準確率
model.evaluate(
test_data, test_labels,
batch_size = batch_size,
verbose = 0)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2760617/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 迴圈神經網路神經網路
- 從零開始用 Python 構建迴圈神經網路Python神經網路
- 常見迴圈神經網路結構神經網路
- 迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路 RNN神經網路RNN
- 使用PyTorch從零開始構建Elman迴圈神經網路PyTorch神經網路
- 迴圈神經網路設計同樣可以使用預訓練詞“嵌入”神經網路
- 十 | 門控迴圈神經網路LSTM與GRU(附python演練)神經網路Python
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- 迴圈神經網路介紹神經網路
- pytorch--迴圈神經網路PyTorch神經網路
- 3.3 神經網路的訓練神經網路
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- NLP與深度學習(二)迴圈神經網路深度學習神經網路
- Pytorch | Tutorial-04 構建神經網路模型PyTorch神經網路模型
- 第五週:迴圈神經網路神經網路
- 機器學習之訓練神經網路:最佳做法機器學習神經網路
- 迴圈神經網路(Recurrent Neural Network,RNN)神經網路RNN
- 動畫圖解迴圈神經網路動畫圖解神經網路
- (一)線性迴圈神經網路(RNN)神經網路RNN
- keras構建神經網路Keras神經網路
- 訓練自己的Android TensorFlow神經網路Android神經網路
- 1.4 神經網路入門-資料處理與模型圖構建神經網路模型
- 如何入門Pytorch之四:搭建神經網路訓練MNISTPyTorch神經網路
- (二)非線性迴圈神經網路(RNN)神經網路RNN
- YJango的迴圈神經網路——實現LSTMGo神經網路
- 深度學習迴圈神經網路詳解深度學習神經網路
- 4.5 RNN迴圈神經網路(recurrent neural network)RNN神經網路
- 使用人工神經網路訓練手寫數字識別模型神經網路模型
- 動手學深度學習第十四課:實現、訓練和應用迴圈神經網路深度學習神經網路
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- 使用tf.estimator.Estimator訓練神經網路神經網路
- 語言模型與神經網路模型神經網路
- 神經網路之反向傳播訓練(8行程式碼)神經網路反向傳播行程
- 吳恩達《序列模型》課程筆記(1)– 迴圈神經網路(RNN)吳恩達模型筆記神經網路RNN
- 深度學習與CV教程(6) | 神經網路訓練技巧 (上)深度學習神經網路
- YJango的迴圈神經網路——scan實現LSTMGo神經網路
- 面向統一的AI神經網路架構和預訓練方法AI神經網路架構