• 售前

  • 售后

热门帖子
入门百科

Keras保存模子并载入模子继承练习的实现

[复制链接]
没有昵称513 显示全部楼层 发表于 2021-10-25 19:30:30 |阅读模式 打印 上一主题 下一主题
我们以MNIST手写数字辨认为例
  1. import numpy as np
  2. from keras.datasets import mnist
  3. from keras.utils import np_utils
  4. from keras.models import Sequential
  5. from keras.layers import Dense
  6. from keras.optimizers import SGD
  7. # 载入数据
  8. (x_train,y_train),(x_test,y_test) = mnist.load_data()
  9. # (60000,28,28)
  10. print('x_shape:',x_train.shape)
  11. # (60000)
  12. print('y_shape:',y_train.shape)
  13. # (60000,28,28)->(60000,784)
  14. x_train = x_train.reshape(x_train.shape[0],-1)/255.0
  15. x_test = x_test.reshape(x_test.shape[0],-1)/255.0
  16. # 换one hot格式
  17. y_train = np_utils.to_categorical(y_train,num_classes=10)
  18. y_test = np_utils.to_categorical(y_test,num_classes=10)
  19. # 创建模型,输入784个神经元,输出10个神经元
  20. model = Sequential([
  21.     Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax')
  22.   ])
  23. # 定义优化器
  24. sgd = SGD(lr=0.2)
  25. # 定义优化器,loss function,训练过程中计算准确率
  26. model.compile(
  27.   optimizer = sgd,
  28.   loss = 'mse',
  29.   metrics=['accuracy'],
  30. )
  31. # 训练模型
  32. model.fit(x_train,y_train,batch_size=64,epochs=5)
  33. # 评估模型
  34. loss,accuracy = model.evaluate(x_test,y_test)
  35. print('\ntest loss',loss)
  36. print('accuracy',accuracy)
  37. # 保存模型
  38. model.save('model.h5')  # HDF5文件,pip install h5py
复制代码


载入初次练习的模子,再练习
  1. import numpy as np
  2. from keras.datasets import mnist
  3. from keras.utils import np_utils
  4. from keras.models import Sequential
  5. from keras.layers import Dense
  6. from keras.optimizers import SGD
  7. from keras.models import load_model
  8. # 载入数据
  9. (x_train,y_train),(x_test,y_test) = mnist.load_data()
  10. # (60000,28,28)
  11. print('x_shape:',x_train.shape)
  12. # (60000)
  13. print('y_shape:',y_train.shape)
  14. # (60000,28,28)->(60000,784)
  15. x_train = x_train.reshape(x_train.shape[0],-1)/255.0
  16. x_test = x_test.reshape(x_test.shape[0],-1)/255.0
  17. # 换one hot格式
  18. y_train = np_utils.to_categorical(y_train,num_classes=10)
  19. y_test = np_utils.to_categorical(y_test,num_classes=10)
  20. # 载入模型
  21. model = load_model('model.h5')
  22. # 评估模型
  23. loss,accuracy = model.evaluate(x_test,y_test)
  24. print('\ntest loss',loss)
  25. print('accuracy',accuracy)
  26. # 训练模型
  27. model.fit(x_train,y_train,batch_size=64,epochs=2)
  28. # 评估模型
  29. loss,accuracy = model.evaluate(x_test,y_test)
  30. print('\ntest loss',loss)
  31. print('accuracy',accuracy)
  32. # 保存参数,载入参数
  33. model.save_weights('my_model_weights.h5')
  34. model.load_weights('my_model_weights.h5')
  35. # 保存网络结构,载入网络结构
  36. from keras.models import model_from_json
  37. json_string = model.to_json()
  38. model = model_from_json(json_string)
  39. print(json_string)
复制代码
关于compile和load_model()的使用次序

这一段落主要是为相识决我们fit、evaluate、predict之前还是之后使用compile。想要弄明白,起首我们要清楚compile在步调中是做什么的?都做了什么?
compile做什么?
compile界说了loss function丧失函数、optimizer优化器和metrics度量。它与权重无关,也就是说compile并不会影响权重,不会影响之前练习的题目。
如果我们要练习模子或者评估模子evaluate,则须要compile,由于练习要使用丧失函数和优化器,评估要使用度量方法;如果我们要猜测,则没有须要compile模子。
是否须要多次编译?
除非我们要更改此中之一:丧失函数、优化器 / 学习率、度量
又或者我们加载了尚未编译的模子。或者您的加载/生存方法没有考虑以前的编译。
再次compile的结果?
如果再次编译模子,将会丢失优化器状态.
这意味着您的练习在开始时会受到一点影响,直到调整学习率,动量等为止。但是绝对不会对重量造成损害(除非您的初始学习率云云之大,以至于第一次练习步骤疯狂地更改微调的权重)。
到此这篇关于Keras生存模子并载入模子继续练习的实现的文章就先容到这了,更多干系Keras生存模子并加载模子内容请搜索草根技术分享以前的文章或继续欣赏下面的干系文章渴望大家以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作