mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
overfit_and_underfit
This commit is contained in:
parent
20bf6431f1
commit
627feef0dc
@ -35,6 +35,7 @@ pip install tensorflow-gpu==2.0.0-rc0
|
||||
6. tensorflow/basic_text_classification.py: 评论文本分类,准确度:86.2%
|
||||
7. tensorflow/feature_columns.py: 对结构化数据进行分类,准确度:72.54%
|
||||
8. tensorflow/basic_regression.py: 线性回归
|
||||
9. tensorflow/overfit_and_underfit.py: 过拟合和欠拟合,准确度:99.99%
|
||||
|
||||
## 相关地址
|
||||
|
||||
|
||||
151
ShadowEditor.AI/tensorflow/overfit_and_underfit.py
Normal file
151
ShadowEditor.AI/tensorflow/overfit_and_underfit.py
Normal file
@ -0,0 +1,151 @@
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
|
||||
import tensorflow as tf
|
||||
from tensorflow import keras
|
||||
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
print(tf.__version__)
|
||||
|
||||
NUM_WORDS = 10000
|
||||
|
||||
(train_data, train_labels), (test_data,
|
||||
test_labels) = keras.datasets.imdb.load_data(num_words=NUM_WORDS)
|
||||
|
||||
|
||||
def multi_hot_sequences(sequences, dimension):
|
||||
# Create an all-zero matrix of shape (len(sequences), dimension)
|
||||
results = np.zeros((len(sequences), dimension))
|
||||
for i, word_indices in enumerate(sequences):
|
||||
# set specific indices of results[i] to 1s
|
||||
results[i, word_indices] = 1.0
|
||||
return results
|
||||
|
||||
|
||||
train_data = multi_hot_sequences(train_data, dimension=NUM_WORDS)
|
||||
test_data = multi_hot_sequences(test_data, dimension=NUM_WORDS)
|
||||
|
||||
plt.plot(train_data[0])
|
||||
|
||||
baseline_model = keras.Sequential([
|
||||
# `input_shape` is only required here so that `.summary` works.
|
||||
keras.layers.Dense(16, activation='relu', input_shape=(NUM_WORDS,)),
|
||||
keras.layers.Dense(16, activation='relu'),
|
||||
keras.layers.Dense(1, activation='sigmoid')
|
||||
])
|
||||
|
||||
baseline_model.compile(optimizer='adam',
|
||||
loss='binary_crossentropy',
|
||||
metrics=['accuracy', 'binary_crossentropy'])
|
||||
|
||||
baseline_model.summary()
|
||||
|
||||
baseline_history = baseline_model.fit(train_data,
|
||||
train_labels,
|
||||
epochs=20,
|
||||
batch_size=512,
|
||||
validation_data=(test_data, test_labels),
|
||||
verbose=2)
|
||||
|
||||
smaller_model = keras.Sequential([
|
||||
keras.layers.Dense(4, activation='relu', input_shape=(NUM_WORDS,)),
|
||||
keras.layers.Dense(4, activation='relu'),
|
||||
keras.layers.Dense(1, activation='sigmoid')
|
||||
])
|
||||
|
||||
smaller_model.compile(optimizer='adam',
|
||||
loss='binary_crossentropy',
|
||||
metrics=['accuracy', 'binary_crossentropy'])
|
||||
|
||||
smaller_model.summary()
|
||||
|
||||
smaller_history = smaller_model.fit(train_data,
|
||||
train_labels,
|
||||
epochs=20,
|
||||
batch_size=512,
|
||||
validation_data=(test_data, test_labels),
|
||||
verbose=2)
|
||||
|
||||
bigger_model = keras.models.Sequential([
|
||||
keras.layers.Dense(512, activation='relu', input_shape=(NUM_WORDS,)),
|
||||
keras.layers.Dense(512, activation='relu'),
|
||||
keras.layers.Dense(1, activation='sigmoid')
|
||||
])
|
||||
|
||||
bigger_model.compile(optimizer='adam',
|
||||
loss='binary_crossentropy',
|
||||
metrics=['accuracy', 'binary_crossentropy'])
|
||||
|
||||
bigger_model.summary()
|
||||
|
||||
bigger_history = bigger_model.fit(train_data, train_labels,
|
||||
epochs=20,
|
||||
batch_size=512,
|
||||
validation_data=(test_data, test_labels),
|
||||
verbose=2)
|
||||
|
||||
|
||||
def plot_history(histories, key='binary_crossentropy'):
|
||||
plt.figure(figsize=(16, 10))
|
||||
|
||||
for name, history in histories:
|
||||
val = plt.plot(history.epoch, history.history['val_'+key],
|
||||
'--', label=name.title()+' Val')
|
||||
plt.plot(history.epoch, history.history[key], color=val[0].get_color(),
|
||||
label=name.title()+' Train')
|
||||
|
||||
plt.xlabel('Epochs')
|
||||
plt.ylabel(key.replace('_', ' ').title())
|
||||
plt.legend()
|
||||
|
||||
plt.xlim([0, max(history.epoch)])
|
||||
|
||||
|
||||
plot_history([('baseline', baseline_history),
|
||||
('smaller', smaller_history),
|
||||
('bigger', bigger_history)])
|
||||
|
||||
|
||||
l2_model = keras.models.Sequential([
|
||||
keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),
|
||||
activation='relu', input_shape=(NUM_WORDS,)),
|
||||
keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),
|
||||
activation='relu'),
|
||||
keras.layers.Dense(1, activation='sigmoid')
|
||||
])
|
||||
|
||||
l2_model.compile(optimizer='adam',
|
||||
loss='binary_crossentropy',
|
||||
metrics=['accuracy', 'binary_crossentropy'])
|
||||
|
||||
l2_model_history = l2_model.fit(train_data, train_labels,
|
||||
epochs=20,
|
||||
batch_size=512,
|
||||
validation_data=(test_data, test_labels),
|
||||
verbose=2)
|
||||
|
||||
|
||||
plot_history([('baseline', baseline_history),
|
||||
('l2', l2_model_history)])
|
||||
|
||||
dpt_model = keras.models.Sequential([
|
||||
keras.layers.Dense(16, activation='relu', input_shape=(NUM_WORDS,)),
|
||||
keras.layers.Dropout(0.5),
|
||||
keras.layers.Dense(16, activation='relu'),
|
||||
keras.layers.Dropout(0.5),
|
||||
keras.layers.Dense(1, activation='sigmoid')
|
||||
])
|
||||
|
||||
dpt_model.compile(optimizer='adam',
|
||||
loss='binary_crossentropy',
|
||||
metrics=['accuracy', 'binary_crossentropy'])
|
||||
|
||||
dpt_model_history = dpt_model.fit(train_data, train_labels,
|
||||
epochs=20,
|
||||
batch_size=512,
|
||||
validation_data=(test_data, test_labels),
|
||||
verbose=2)
|
||||
|
||||
plot_history([('baseline', baseline_history),
|
||||
('dropout', dpt_model_history)])
|
||||
Loading…
x
Reference in New Issue
Block a user