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层以及训练过程的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow2.0 squeeze出错

Tensorflow 2.0:自定义 keras 指标导致 tf.function 回溯警告

自定义权重初始化 tensorflow tf.layers.dense

tensorflow2.0高阶api--主要为tf.keras.models提供的模型的类接口

在 TensorFlow 2.0 中实现自定义损失函数

在 Tensorflow 2.0 中是不是有更简单的方法来执行模型层?