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)