jyupter notebook上編寫
from tensorflow.python.keras.datasets import imdb
import numpy as np
(train_data, train_labels)
,(test_data, test_labels)
= imdb.load_data(num_words=
10000
)# num_words=10000 單詞的索引最大不會超過10000,只選取常用單詞的前10000個
print
(train_data.shape,
'\n'
)print
(train_data[0]
, end='')
print
('\n'
)print
(train_labels[0]
)print
('\n'
)print
(max([
max(sequence)
for sequence in train_data]))
# 最大單詞的索引只到9999
"""準備資料:
不能將整數序列直接輸入神經網路,需要將列表轉化為張量。
(1)填充列表,使其具有相同的長度,再將列表轉化為(samples,word_indices))
(2)one-hot編碼,將列表轉化為0,1組成的向量
這裡採用(2)"""
import numpy as np
defvectorize_sequences
(sequences, dimension=
10000):
results = np.zeros(
(len
(sequences)
, dimension)
)# 建立乙個形狀為(len(sequenses), dimension))的零矩陣
for i, sequence in
enumerate
(sequences)
: results[i, sequence]=1
# 將results的指定索引設定為1
return results
x_train = vectorize_sequences(train_data)
# 訓練資料向量化
x_test = vectorize_sequences(test_data)
# 測試資料向量化
x_train[0]
# one-hot化了
"""標籤向量化,標籤值本來就是0,1"""
t_train = np.asarray(train_labels)
.astype(
'float32'
)t_test = np.asarray(test_labels)
.astype(
'float32'
)# 現在可以將資料輸入到神經網路裡了
"""構建網路"""
from tensorflow.python.keras import layers
from tensorflow.python.keras import models
from tensorflow.python.keras import optimizers
from tensorflow.python.keras import losses
from tensorflow.python.keras import metrics
model = models.sequential(
)model.add(layers.dense(
16, activation=
'relu'
, input_shape=
(10000,)
))model.add(layers.dense(
16, activation=
'relu'))
model.add(layers.dense(
1, activation=
'sigmoid'))
# 輸出乙個0~1的概率
model.
compile
(optimizer=
'rmsprop'
, loss=
'binary_crossentropy'
, metrics=
['accuracy'])
# 配置自定義的優化器 model.compile(optimizer=optimizers.rmsprop(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])
# model.compile(optimizer=optimizers.rmsprop(lr=0.001), loss=losses.binary_crossentropy, metrics=[metrics.binary_accuracy])
"""留出驗證集:
需要將原始訓練資料留出10000個樣本作為驗證集"""
x_val = x_train[
:10000
]partial_x_train = x_train[
10000:]
t_val = t_train[
:10000
]partial_t_train = t_train[
10000
:]
"""訓練模型
history是乙個字典"""
model.
compile
(optimizer=
'rmsprop'
, loss=
'binary_crossentropy'
, metrics=
['acc'])
history = model.fit(partial_x_train,
partial_t_train,
epochs=20,
batch_size=
512,
validation_data=
(x_val, t_val)
)# x_val訓練集,t_val驗證集
history_dict = history.history
print
(history_dict.keys(
))
"""繪製訓練損失和驗證損失"""
import matplotlib.pyplot as plt
history_dict = history.history
loss_values = history_dict[
'loss'
]val_loss_values = history_dict[
'val_loss'
]epochs =
range(1
,len
(loss_values)+1
)plt.plot(epochs, loss_values,
'bo'
, label=
'training loss'
)# 'bo'代表藍色圓圈
plt.plot(epochs, val_loss_values,
'b', label=
'validation loss'
)# 'b'代表藍色實線
plt.xlabel(
'epochs'
)plt.ylabel(
'loss'
)plt.title(
'訓練損失和驗證損失'
)plt.legend(
)plt.show(
)# 結果過擬合了
"""繪製訓練精度和驗證精度"""
acc = history_dict[
'acc'
]val_acc = history_dict[
'val_acc'
]plt.plot(epochs, acc,
'bo'
, label=
'training acc'
) plt.plot(epochs, val_acc,
'b', label=
'validation acc'
) plt.title(
'training and validation accuracy'
) plt.xlabel(
'epochs'
) plt.ylabel(
'accuracy'
) plt.legend(
)plt.show(
)# 過擬合
"""使用訓練好的網路在新資料上生成**結果"""
model.predict(x_test)
# 有些分了結果非常確信,有些則不那麼確信
AI 神經網路IMDB電影評論二分類模型訓練和評估
import keras from keras.layers import dense from keras import models from keras import optimizers from keras.datasets import imdb from keras import lo...
二分類問題
模型 帶有relu啟用的dense層堆疊 對於二分類問題,網路的最後一層應該是只有乙個單元並使用sigmoid啟用的dense層,網路的輸出應該是0 1的標量,表示概率值 對於二分類問題的sigmoid標量輸出,應該使用binary crossentroy 二元交叉熵 損失函式 實驗 1 嘗試增加或...
二分類問題
深度學習中的基本問題就是這個,上午我還達到90 85 的acc,現在只有76 臥槽,我動 了啊?有鬼。明明沒怎麼改引數,卻再也回不到過去,這個trick不小啊。既然回不到過去,不妨重新開始吧。我套了一下vgg,發現網路太深了,根本跑不動,效果也不好,減少網路後,acc反而有提高,之前我還以為驗證集有...