import numpy as np
 import matplotlib.pyplot as plt
 import os
 import time

 import tensorflow as tf
 tf.enable_eager_execution()

 # create data
 X = np.linspace(-1, 1, 5000)
 np.random.shuffle(X)
 y = 0.5 * X + 2 + np.random.normal(0, 0.05, (5000,))

 # plot data
 plt.scatter(X, y)
 plt.show()

 # split data
 X_train, y_train = X[:4000], y[:4000]
 X_test, y_test = X[4000:], y[4000:]

 # tf.data
 BATCH_SIZE = 32
 BUFFER_SIZE = 512
 dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(BATCH_SIZE).shuffle(BUFFER_SIZE)

 # subclassed model
 UNITS = 1

 class Model(tf.keras.Model):
     def __init__(self):
         super(Model, self).__init__()
         self.fc = tf.keras.layers.Dense(units=UNITS)

     def call(self, inputs):
         return self.fc(inputs)

 model = Model()

 optimizer = tf.train.AdamOptimizer()

 # loss function
 def loss_function(real, pred):
     return tf.losses.mean_squared_error(labels=real, predictions=pred)

 EPOCHS = 30
 checkpoint_dir = './save_subclassed_keras_model_training_checkpoints'
 if not os.path.exists(checkpoint_dir):
     os.makedirs(checkpoint_dir)

 # training loop
 for epoch in range(EPOCHS):
     start = time.time()
     epoch_loss = 0

     for (batch, (x, y)) in enumerate(dataset):
         x = tf.cast(x, tf.float32)
         y = tf.cast(y, tf.float32)
         x = tf.expand_dims(x, axis=1)
         y = tf.expand_dims(y, axis=1)
         # print(x)    # tf.Tensor([...], shape=(BATCH_SIZE, 1), dtype=float32)
         # print(y)    # tf.Tensor([...], shape=(BATCH_SIZE, 1), dtype=float32)
         with tf.GradientTape() as tape:
             predictions = model(x)
             # print(predictions)  # tf.Tensor([...], shape=(BATCH_SIZE, 1), dtype=float32)
             batch_loss = loss_function(real=y, pred=predictions)

         grads = tape.gradient(batch_loss, model.variables)
         optimizer.apply_gradients(zip(grads, model.variables),
                                   global_step=tf.train.get_or_create_global_step())
         epoch_loss += batch_loss

         if (batch + 1) % 10 == 0:
             print('Epoch {} Batch {} Loss {:.4f}'.format(epoch + 1,
                                                          batch + 1,
                                                          batch_loss/int(x.shape[0])))

     print('Epoch {} Loss {:.4f}'.format(epoch + 1, epoch_loss/len(X_train)))
     print('Time taken for 1 epoch {} sec\n'.format(time.time() - start))

     # save checkpoint
     checkpoint_prefix = os.path.join(checkpoint_dir, 'ckpt')
     if (epoch + 1) % 10 == 0:
         model.save_weights(checkpoint_prefix.format(epoch=epoch), overwrite=True)

 _model = Model()
 _model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
 _model.build(input_shape=tf.TensorShape([BATCH_SIZE, 1]))
 _model.summary()

 test_dataset = tf.data.Dataset.from_tensor_slices(X_test).batch(1)

 for (batch, x) in enumerate(test_dataset):
     x = tf.cast(x, tf.float32)
     x = tf.expand_dims(x, axis=1)
     print(x)
     predictions = _model(x)
     print(predictions)
     exit()

[Tensorflow] 使用 model.save_weights() 保存 Keras Subclassed Model的更多相关文章

  1. [Tensorflow] 使用 model.save_weights() 保存 / 加载 Keras Subclassed Model

    在 parameters.py 中,定义了各类参数. # training data directory TRAINING_DATA_DIR = './data/' # checkpoint dire ...

  2. [Tensorflow] 使用 tf.train.Checkpoint() 保存 / 加载 keras subclassed model

    在 subclassed_model.py 中,通过对 tf.keras.Model 进行子类化,设计了两个自定义模型. import tensorflow as tf tf.enable_eager ...

  3. keras系列︱Sequential与Model模型、keras基本结构功能(一)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72857454 中文文档:http://keras-cn.readthedocs.io/ ...

  4. Keras(一)Sequential与Model模型、Keras基本结构功能

    keras介绍与基本的模型保存 思维导图 1.keras网络结构 2.keras网络配置 3.keras预处理功能 模型的节点信息提取 config = model.get_config() 把mod ...

  5. [Model] LeNet-5 by Keras

    典型的卷积神经网络. 数据的预处理 Keras傻瓜式读取数据:自动下载,自动解压,自动加载. # X_train: array([[[[ 0., 0., 0., ..., 0., 0., 0.], [ ...

  6. xen 保存快照的实现之 —— device model 状态保存

    xen 保存快照的实现之 —— device model 状态保存 实现要点: 设备状态保存在 /var/lib/xen/qemu-save.x 文件这个文件由 qemu-dm 产生,也由 qemu- ...

  7. AI - TensorFlow - 示例05:保存和恢复模型

    保存和恢复模型(Save and restore models) 官网示例:https://www.tensorflow.org/tutorials/keras/save_and_restore_mo ...

  8. 如何保存Keras模型

    我们不推荐使用pickle或cPickle来保存Keras模型 你可以使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含: 模型的结构,以便重构该 ...

  9. Python之TensorFlow的模型训练保存与加载-3

    一.TensorFlow的模型保存和加载,使我们在训练和使用时的一种常用方式.我们把训练好的模型通过二次加载训练,或者独立加载模型训练.这基本上都是比较常用的方式. 二.模型的保存与加载类型有2种 1 ...

随机推荐

  1. 找了两个node+vue-cli+mogodb的小项目学学

    实现的博客系统,自己抽时间搭建看看 https://www.cnblogs.com/yesyes/p/7188331.html https://github.com/chaohangz/vueBlog

  2. JS重名解决方案

    一个页面如果引用多个JS,或者像ASP.NET MVC,一个视图包含多个子视图,每个子视图有自己的JS,那么变量.函数的重名冲突机会将会大增. 如何解决? 这里有一个方案: 1.用类来封装子页的JS代 ...

  3. 电脑的系统盘只有10G了

    软件也是缓存多了,准备把一些让家人卸载,昨天开始布置培训任务就是有一个电报的程序,把流程说了下,从今天开始就会指导,错误点分析.

  4. ZOJ 3955 Saddle Point 校赛 一道计数题

    ZOJ3955 题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于 ...

  5. JSP页面结构

    1.表达式格式(experssion):<%=value %>//用来在页面中调用java表达式,从而得到返回值 <%=new java.util.Date();%> 2.小脚 ...

  6. java运行jdk连接mysql出现了:Establishing SSL connection without server's identity verification is not recommended

    注意:出现这类提示也不会影响对数据库的增删改查操作,所以不用紧张.. 在运行练习时出现下面的错误信息提示: Establishing SSL connection without server's i ...

  7. LuoguP3398 仓鼠找sugar

    竞赛课想找一道水一点的tarjan题,看看这么久没做题手感有没有掉... 结果这题貌似不是tarjan啊...应该是LCA...假的标签!! 一遍过样例+一遍AC祭(好吧这么水的题也没啥好开心的) 大 ...

  8. base64编码上传图片java后台接收实例

    原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...

  9. 【洛谷4721】【模板】分治FFT(CDQ分治_NTT)

    题目: 洛谷 4721 分析: 我觉得这个 "分治 FFT " 不能算一种特殊的 FFT ,只是 CDQ 分治里套了个用 FFT (或 NTT)计算的过程,二者是并列关系而不是偏正 ...

  10. 51nod1381 硬币游戏

    1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有一个简单但是很有趣的游戏.在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平 ...