содержание
Загрузите первую обученную модель и переобучите
О порядке использования compile и load_model()
сохранить модель
Возьмем в качестве примера распознавание рукописных цифр MNIST.
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# (60000,28,28)
print('x_shape:',x_train.shape)
# (60000)
print('y_shape:',y_train.shape)
# (60000,28,28)->(60000,784)
x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)
# 创建模型,输入784个神经元,输出10个神经元
model = Sequential([
Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax')
])
# 定义优化器
sgd = SGD(lr=0.2)
# 定义优化器,loss function,训练过程中计算准确率
model.compile(
optimizer = sgd,
loss = 'mse',
metrics=['accuracy'],
)
# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=5)
# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)
print('\ntest loss',loss)
print('accuracy',accuracy)
# 保存模型
model.save('model.h5') # HDF5文件,pip install h5py
Загрузите первую обученную модель и переобучите
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
from keras.models import load_model
# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# (60000,28,28)
print('x_shape:',x_train.shape)
# (60000)
print('y_shape:',y_train.shape)
# (60000,28,28)->(60000,784)
x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)
# 载入模型
model = load_model('model.h5')
# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)
print('\ntest loss',loss)
print('accuracy',accuracy)
# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=2)
# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)
print('\ntest loss',loss)
print('accuracy',accuracy)
# 保存参数,载入参数
model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5')
# 保存网络结构,载入网络结构
from keras.models import model_from_json
json_string = model.to_json()
model = model_from_json(json_string)
print(json_string)
О порядке использования compile и load_model()
Этот абзац в основном предназначен для того, чтобы решить, используем ли мы компиляцию до или после подгонки, оценки и прогнозирования. Чтобы разобраться, для начала нам нужно узнать, что компиляция делает в программе? Что вы наделали?
что делает компиляция?
compile определяет функцию потерьфункция потерь, оптимизатороптимизатори показателимера. Это не имеет никакого отношения к весам, то есть compile не влияет на веса и не затрагивает проблемы предыдущего обучения.
Если мы хотим обучить модель или оценить модель, нам нужно скомпилировать, потому что обучение использует функции потерь и оптимизаторы, а оценка использует метрики; если мы хотим предсказать, нет необходимости компилировать модель.
Нужно ли компилировать несколько раз?
Если мы не хотим изменить один из них: функцию потерь, оптимизатор/скорость обучения, метрику
Или мы загрузили модель, которая еще не была скомпилирована. Или ваши методы загрузки/сохранения не учитывают предыдущие компиляции.
Последствия повторной компиляции?
При повторной компиляции модели состояние оптимизатора будет потеряно.
Это означает, что вначале ваше обучение будет немного страдать, пока вы не отрегулируете скорость обучения, импульс и т. д. Но абсолютно никакого ущерба весам (если только ваша начальная скорость обучения не настолько велика, что первый шаг обучения резко меняет точно настроенные веса)
воспроизводится вБлог Woohoo.cn on.com/l XP-never/ Боюсь…