tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑
自定义tf.keras.Model需要注意的点
model.save()
- subclass Model 是不能直接save的,save成.h5,但是能够save_weights,或者save_format="tf"
NotImplementedError: Saving the model to HDF5 format requires the model to be a Functional model or a Sequential model. It does not work for subclassed models, because such models are defined via the body of a Python method, which isn't safely serializable. Consider saving to the Tensorflow SavedModel format (by setting save_format="tf") or using `save_weights`.
model.trainable_variables
- __init__若没有注册该layers,那么在后面应用梯度时会找不到model.trainable_variables。
像下面这样是不行的:
class Map_model(tf.keras.Model):
def __init__(self, is_train=False):
super(Map_model, self).__init__()
def call(self, x):
x = tf.keras.layers.Dense(10, activation='relu')
return x
model.summary()
- 需要先指定input_shape,或者你直接fit一遍它也能自动确定
model.build(input_shape=(None, 448, 448, 3))
print(model.summary())
class Map_model(tf.keras.Model):
def __init__(self, is_train=False):
super(Map_model, self).__init__()
self.map_f1 = tf.keras.layers.Dense(10, activation='relu', trainable=is_train)
# self.map_f2 = tf.keras.layers.Dense(6, activation='relu')
self.map_f3 = tf.keras.layers.Dense(3, activation='softmax', trainable=is_train)
def call(self, x):
x = self.map_f1(x)
# x = self.map_f2(x)
return self.map_f3(x)
@tf.function
def train_step(mmodel, label, L_label, loss_object, train_loss, train_accuracy, optimizer):
with tf.GradientTape() as tape:
L_label_pred = mmodel(label)
loss = loss_object(L_label, L_label_pred)
gradient_l = tape.gradient(loss, mmodel.trainable_variables)
train_loss(loss)
train_accuracy(L_label, L_label_pred)
optimizer.apply_gradients(zip(gradient_l, mmodel.trainable_variables))
def train():
mmodel = Map_model(is_train=True)
optimizer = tf.keras.optimizers.Adam(0.01)
loss_object = tf.keras.losses.CategoricalCrossentropy()
train_loss = tf.keras.metrics.Mean(name='train_loss')
train_accuracy = tf.keras.metrics.CategoricalAccuracy(name='train_accuracy')
EPOCHS = 0
labels = range(1, 30) # labels = truth_label -1
L_labels = [int(prpcs.map2Lclass(l)) for l in labels]
labels = [l - 1 for l in labels]
labels_onehot = tf.one_hot(labels, depth=29)
L_labels_onehot = tf.one_hot(L_labels, depth=3)
EPS = 1e-6
loss_e = 0x7f7f7f
while loss_e > EPS:
EPOCHS += 1
train_loss.reset_states()
train_accuracy.reset_states()
train_step(mmodel, labels_onehot, L_labels_onehot, loss_object, train_loss, train_accuracy, optimizer)
template = 'Epoch {}, Loss: {}, Accuracy: {}'
print(template.format(EPOCHS,
train_loss.result(),
train_accuracy.result() * 100))
loss_e = train_loss.result()
print("labels_onehot shape:", labels_onehot.shape)
model_path = r'./models/'
if not os.path.exists(model_path):
os.makedirs(model_path)
mmodel.save(os.path.join(model_path, 'map_model_{}'.format(EPS)))
mmodel.save_weights(os.path.join(model_path, 'map_model_weights_{}'.format(EPS)))
print("Save model!")
tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑的更多相关文章
- tf.keras遇见的坑:Output tensors to a Model must be the output of a TensorFlow `Layer`
经过网上查找,找到了问题所在:在使用keras编程模式是,中间插入了tf.reshape()方法便遇到此问题. 解决办法:对于遇到相同问题的任何人,可以使用keras的Lambda层来包装张量流操作, ...
- [TensorFlow 2.0] Keras 简介
Keras 是一个用于构建和训练深度学习模型的高阶 API.它可用于快速设计原型.高级研究和生产. keras的3个优点: 方便用户使用.模块化和可组合.易于扩展 简单点说就是,简单.好用.快(构建) ...
- 三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化
本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 学习笔记类似提纲,具体细节参照上文链接 一些前置的基础 随机数 tf.random uniform(sha ...
- python 3.7 安装 sklearn keras(tf.keras)
# 1 sklearn 一般方法 网上有很多教程,不再赘述. 注意顺序是 numpy+mkl ,然后 scipy的环境,scipy,然后 sklearn # 2 anoconda ana ...
- 【tf.keras】TensorFlow 1.x 到 2.0 的 API 变化
TensorFlow 2.0 版本将 keras 作为高级 API,对于 keras boy/girl 来说,这就很友好了.tf.keras 从 1.x 版本迁移到 2.0 版本,需要修改几个地方. ...
- 一文上手Tensorflow2.0之tf.keras(三)
系列文章目录: Tensorflow2.0 介绍 Tensorflow 常见基本概念 从1.x 到2.0 的变化 Tensorflow2.0 的架构 Tensorflow2.0 的安装(CPU和GPU ...
- TensorFlow2.0(11):tf.keras建模三部曲
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 【tf.keras】tf.keras使用tensorflow中定义的optimizer
Update:2019/09/21 使用 tf.keras 时,请使用 tf.keras.optimizers 里面的优化器,不要使用 tf.train 里面的优化器,不然学习率衰减会出现问题. 使用 ...
- 【tf.keras】Resource exhausted: OOM when allocating tensor with shape [9216,4096] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
运行以下类似代码: while True: inputs, outputs = get_AlexNet() model = tf.keras.Model(inputs=inputs, outputs= ...
随机推荐
- IC SPEC相关数据
---恢复内容开始--- 静态电流:静态电流是指没有信号输入时的电流,也就是器件本身在不受外部因素影响下的本身消耗电流. 纹波电压的害处: 1.容易在用设备中产生不期望的谐波,而谐波会产生较多的危害: ...
- Java如何导入一个新的项目
下面将展示如何将一个项目导入eclipse中 1.点击文件-------->从系统中打开项目 2.选择你要导入的项目所在的目录 3.配置环境 单击项目,选择构建路径------>配置构建路 ...
- vscode预览markdown文件
前提是需要安装Markdown Preview Enhanced插件
- Confluence 6 多媒体文件和在页面中显示文件列表
多媒体文件 文件的预览同时也支持 MP3 音频和 MP4 视频文件.Confluence 使用 HTML 5 来播放附加的音频和视频文件.这个意味着这些文件类型的文件格式,用户可以在支持的浏览器中直接 ...
- Springboot 解决跨域请求
Cors处理 跨域请求 细粒度 直接在controller层上 添加@CrossOrigin注解 @PostMapping("/") @CrossOrigin(value = &q ...
- Apicloud_(项目)网上书城01_前端搭建
[本文皆在记录自己开发Apicloud项目过程,不具备教学水平性文章] 参考书籍<30天App开发从0到1> Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud ...
- Unity3D_(插件)使用Camera渲染制作Minimap小地图
制作小地图:使用Camera渲染出来Render Texture 原理:使用摄像机从上到下获得场景游戏物体,摄像机Culling Mask渲染层级可设置是否需要在小地图上展示游戏物体,将摄像机获得的场 ...
- windows基础提权
Window基础提权 提到system权限 甚至让他变成你的肉鸡 我们了解一下windows下面有那些用户 Guests是用户最低的权限 而且一般是被禁用的 User权限也很低 连关机都不行 还有wi ...
- Javascript事件:this.value()和this.select()
1.JavaScript的this.value() <asp:TextBox ID="txtComment" runat="server" Text=&q ...
- 第八周总结&实验报告六
总结:这周主要是学习异常的使用,已经怎么解决异常,总的来说学习的还是有点难度的,因为前面的知识还需要时间去弥补,这门课程还是要加油的学习! 这周主要所学: 一.异常 1.异常是导致程序中断运行的一种指 ...