tensorflow2.0(2)-自定义Dense层以及训练过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow2.0(2)-自定义Dense层以及训练过程相关的知识,希望对你有一定的参考价值。
参考技术A 之前展示了tensorflow2.0的一个初级的实用例子作为开始,对比1.x版本操作还是有好很多的。接下来也将继续从比较基础的层面去了解tf2.0的各种实现
tensorflow2.0在上以keras去搭建网络,这种封装好的基础/高级api在使用上无疑更便捷,但在学习的过程中也不妨自己去实现一些功能,加深理解。
以实现最简单的全连接层和训练过程为例,
简单搭个网络:
我们可以用类去自定义Dense的功能,也是非常简单的
这一样来,就可以直接用自定义的类DenseLayer去替换keras的全连接层
对于实现分类的损失函数而言,也是简单粗暴的,对于标签的格式是one_hot的,用 tf.nn.softmax_cross_entropy_with_logits ,
反之 tf.nn.sparse_softmax_cross_entropy_with_logits ,本文自然用到了后者。
关于tf2.0,貌似 tf.GradientTape() 保留了下来,自定义梯度计算这一部分可以作为一个篇章去讲述,以后也会去探索
所以把单步训练和梯度更新过程写在一起
因为在loss_func的计算里包含了softmax,所以在最后一层不添加激活函数
参考上一篇文章,但也有不一样的地方,其中没用到测试集,只关注训练时loss的变化过程
最终可以看到loss是降得很快的
end.
以上是关于tensorflow2.0(2)-自定义Dense层以及训练过程的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow 2.0:自定义 keras 指标导致 tf.function 回溯警告
自定义权重初始化 tensorflow tf.layers.dense