import os
import tensorflow as tf
from tensorflow import keras
#tf.__version__
(train_images,train_labels),(test_images,test_labels)=tf.keras.datasets.mnist.load_data()
train_labels=train_labels[:1000]
test_labels = test_labels[:1000]
train_images=train_images[:1000].reshape(-1,28*28)/255.0
test_images=test_images[:1000].reshape(-1,28*28)/255.0
def create_model():
model=tf.keras.models.Sequential([
keras.layers.Dense(512,activation=tf.nn.relu,input_shape=(784,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(10,activation=tf.nn.softmax)
])
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=['accuracy'])
return model
model = create_model()
model.summary()
checkpoint_path = 'training_1/cp.ckpt'
checkpoint_dir=os.path.dirname(checkpoint_path)
print(checkpoint_dir)
cp_callback=tf.keras.callbacks.ModelCheckpoint(checkpoint_path,
save_weights_only=True,
verbose=1)#是否显示进度条
model = create_model()
model.fit(train_images,train_labels,epochs=10,
validation_data=(test_images,test_labels),
callbacks = [cp_callback])
#返回的是history对象
model_1 = create_model()
loss,acc = model_1.evaluate(test_images,test_labels)
print("Untrained model,accurcy:{:5.2f}%".format(100*acc))
#1000/1000 [==============================] - 0s 168us/step
#Untrained model,accurcy: 9.20%
model_1.load_weights(checkpoint_path)
loss,acc = model_1.evaluate(test_images,test_labels)#返回的是损失和正确率的元组
print("Restored model,accurcy:{:5.2f}%".format(100*acc))
#1000/1000 [==============================] - 0s 80us/step
#Restored model,accurcy:86.80%
#边训练边存储权重
checkpoint_path = "training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
cp_callback = tf.keras.callbacks.ModelCheckpoint(
checkpoint_path,verbose=1,save_weights_only=True,
period=5)#每隔5 epochs存储一次
model = create_model()
model.fit(train_images,train_labels,
epochs=50,callbacks=[cp_callback],
validation_data=(test_images,test_labels),
verbose=0)
pwd = os.getcwd()
filename_list = os.listdir(pwd+'/training_2')
filename_last = filename_list[-1]
model_2 = create_model()
model_2.load_weights('training_2/'+filename_last)
model_2.evaluate(test_images,test_labels)
#1000/1000 [==============================] - 0s 138us/step
#[0.49394365420937536, 0.878]
#手动存储权重
model.save_weights('checkpoints/my_checkpoints')
model_3 = create_model()
model_3.load_weights('checkpoints/my_checkpoints')
model_3.evaluate(test_images,test_labels)
#1000/1000 [==============================] - 0s 184us/step
#[0.49394365420937536, 0.878]
#存储整个模型
model = create_model()
model.fit(train_images,train_labels)
model.save('whole_model/my_model.h5')
model_4 = keras.models.load_model('whole_model/my_model.h5')
model_4.summary()
model_4.evaluate(test_images,test_labels)
#[0.71717708683013914, 0.79400000000000004]