首页 > 解决方案 > 如何加载模型和恢复训练张量流

问题描述

我想加载训练模型并从最后一个检查点恢复它,任何可以帮助我吗?我正在使用 tensorflow 2.0 。我有低规格的电脑,所以我不能一次训练我的模型。

import tensorflow as tf 
from tensorflow.keras import models, layers
import matplotlib.pyplot as plt
from tensorflow.python.keras.metrics import acc
import datetime
from tensorflow.keras.callbacks import TensorBoard

IMAGE_SIZE = 224
CHANNELS = 3

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=10,
    horizontal_flip=True
 )
 train_generator = train_datagen.flow_from_directory(
    'data/train/',
    color_mode="rgb",
    target_size=(IMAGE_SIZE,IMAGE_SIZE),
    batch_size=32,
    class_mode="sparse",

)
print(train_generator.class_indices)

class_names = list(train_generator.class_indices.keys())
print(class_names)

validation_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=10,
    horizontal_flip=True)
validation_generator = validation_datagen.flow_from_directory(
    'data/validation/',
    target_size=(IMAGE_SIZE,IMAGE_SIZE),
    batch_size=32,
    class_mode="sparse"
)

test_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=10,
    horizontal_flip=True)

 test_generator = test_datagen.flow_from_directory(
    'data/test/',
    target_size=(IMAGE_SIZE,IMAGE_SIZE),
    batch_size=32,
    class_mode="sparse"
 )

 input_shape = (IMAGE_SIZE, IMAGE_SIZE, CHANNELS)
 n_classes = 2

 model = models.Sequential([
 layers.InputLayer(input_shape=input_shape),
 layers.Conv2D(32, kernel_size = (3,3), activation='relu'),
 layers.MaxPooling2D((2, 2)),
 layers.Conv2D(64,  kernel_size = (3,3), activation='relu'),
 layers.MaxPooling2D((2, 2)),
 layers.Conv2D(64,  kernel_size = (3,3), activation='relu'),
 layers.MaxPooling2D((2, 2)),
 layers.Conv2D(64, (3, 3), activation='relu'),
 layers.MaxPooling2D((2, 2)),
 layers.Conv2D(64, (3, 3), activation='relu'),
 layers.MaxPooling2D((2, 2)),
 layers.Conv2D(64, (3, 3), activation='relu'),
 layers.MaxPooling2D((2, 2)),
 layers.Flatten(),
 layers.Dense(64, activation='relu'),
 layers.Dense(n_classes, activation='softmax'),
 ])
 model.summary()
 model.compile(
 optimizer='adam',
 loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
 metrics=['accuracy']
 )
import os
checkpoint_path = "teta/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
cp_callback = tf.keras.callbacks.ModelCheckpoint(
checkpoint_path,save_weights_only=True,verbose=1)

history = model.fit(
train_generator,
steps_per_epoch=30,
batch_size=32,
validation_data=validation_generator,
validation_steps=22,
verbose=1,
callbacks=[cp_callback],
epochs=2,
)

我想加载训练模型并从最后一个检查点恢复它,任何可以帮助我吗?我正在使用 tensorflow 2.0 。我有低规格的电脑,所以我不能一次训练我的模型。

标签: pythontensorflowkerastensorflow2.0

解决方案


我建议使用 保存整个模型,model.save(*)然后使用model.load(*). 有关详细信息,请参阅此文档。在您的情况下,您可以运行:

model.load_weights('teta/your_checkpoint')

在再次调用之前model.fit(*)


推荐阅读