從零基礎入門Tensorflow2.0 ----七、33 數據padding,模型構建,訓練

every blog every motto:

0. 前言

cifar10 訓練

1. 代碼部分

1. 導入模塊

import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras

os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:0'
print(tf.__version__)
print(sys.version_info)
for module in mpl,np,pd,sklearn,tf,keras:
    print(module.__name__,module.__version__)

2. 讀取數據

2.1 載入數據

imdb = keras.datasets.imdb
vocab_size = 10000
index_from = 3

# 載入數據
(train_data,train_labels),(test_data,test_labels) = imdb.load_data(num_words=vocab_size,index_from=index_from)

2.2 驗證數據

# 驗證數據
print(train_data[0],train_labels[0])
print(train_data.shape,train_labels.shape)
print(len(train_data[0]),len(train_data[1]))
print(test_data.shape,test_labels.shape)
word_index = imdb.get_word_index()
print(len(word_index))
print(word_index)

2.3 改變字典

word_index = {k:(v+3) for k,v in word_index.items()}
word_index['<PAD>'] = 0
word_index['<START>'] = 1
word_index['<UNK>'] = 2
word_index['<END>'] = 3

reverse_word_index = dict([(value,key )for key,value in word_index.items()])

def decode_review(text_ids):
    return ' '.join(reverse_word_index.get(word_id,'<UNK>') for word_id in text_ids)

decode_review(train_data[0])
max_length = 500

train_data = keras.preprocessing.sequence.pad_sequences(
    train_data, # list of list
    value = word_index['<PAD>'],
    padding='post' , # post,pre
    maxlen = max_length,
)

test_data = keras.preprocessing.sequence.pad_sequences(
    test_data, # list of list
    value = word_index['<PAD>'],
    padding='post' , # post,pre
    maxlen = max_length,
)

print(train_data[0])

3. 定義模型

# 定義模型
embedding_dim = 16
batch_size = 16

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.Dense(64,activation='relu'),
    keras.layers.Dense(1,activation='sigmoid'),
    
])

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

4. 訓練

history = model.fit(train_data,train_labels,epochs=30,batch_size=batch_size,validation_split = 0.2)

5. 學習曲線

# 學習曲線
def plot_learning_curves(hsitory,label,epochs,min_value,max_value):
    data = {}
    data[label] = history.history[label]
    data['val_' + label] = hsitory.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',30,0,1)
plot_learning_curves(history,'loss',30,0,1)

6. 測試集上

model.evaluate(test_data,test_labels,batch_size=batch_size)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章