Tensorflow2.0初探——keras回调函数、实现简单的图像分类、
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
print ( tf. __version__)
print ( sys. version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print ( module. __name__, module. __version__)
2、导入数据
fashion_mnist = keras. datasets. fashion_mnist
( x_train_all, y_train_all) , ( x_test, y_test) = fashion_mnist. load_data( )
x_valid, x_train = x_train_all[ : 5000 ] , x_train_all[ 5000 : ]
y_valid, y_train = y_train_all[ : 5000 ] , y_train_all[ 5000 : ]
print ( x_valid. shape, y_valid. shape)
print ( x_train. shape, y_train. shape)
print ( x_test. shape, y_test. shape)
3、数据归一化
from sklearn. preprocessing import StandardScaler
scaler = StandardScaler( )
x_train_scaled = scaler. fit_transform(
x_train. astype( np. float32) . reshape( - 1 , 1 ) ) . reshape( - 1 , 28 , 28 )
x_valid_scaled = scaler. transform(
x_valid. astype( np. float32) . reshape( - 1 , 1 ) ) . reshape( - 1 , 28 , 28 )
x_test_scaled = scaler. transform(
x_test. astype( np. float32) . reshape( - 1 , 1 ) ) . reshape( - 1 , 28 , 28 )
4、创建模型
"""
model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28, 28]))
model.add(keras.layers.Dense(300, activation="relu"))
model.add(keras.layers.Dense(100, activation="relu"))
model.add(keras.layers.Dense(10, activation="softmax"))
"""
model = keras. models. Sequential( [
keras. layers. Flatten( input_shape= [ 28 , 28 ] ) ,
keras. layers. Dense( 300 , activation= 'relu' ) ,
keras. layers. Dense( 100 , activation= 'relu' ) ,
keras. layers. Dense( 10 , activation= 'softmax' )
] )
model. compile ( loss= "sparse_categorical_crossentropy" ,
optimizer = "sgd" ,
metrics = [ "accuracy" ] )
5、定义回调函数callback
logdir = './callbacks'
if not os. path. exists( logdir) :
os. mkdir( logdir)
output_model_file = os. path. join( logdir,
"fashion_mnist_model.h5" )
callbacks = [
keras. callbacks. TensorBoard( logdir) ,
keras. callbacks. ModelCheckpoint( output_model_file,
save_best_only = True ) ,
keras. callbacks. EarlyStopping( patience= 5 , min_delta= 1e - 3 ) ,
]
history = model. fit( x_train_scaled, y_train, epochs= 10 ,
validation_data= ( x_valid_scaled, y_valid) ,
callbacks = callbacks)
6、绘制各项训练数据图像
def plot_learning_curves ( history) :
pd. DataFrame( history. history) . plot( figsize= ( 8 , 5 ) )
plt. grid( True )
plt. gca( ) . set_ylim( 0 , 1 )
plt. show( )
plot_learning_curves( history)
7、评估验证函数
model. evaluate( x_test_scaled, y_test)