tensorflow2.0神经网络实践,tensorflow人工智能
正文共1232张图,一张图,预计阅读时间7分钟。
吉图布:https://github.com/sladesha/deep_learning
之前我写了一个基于Tensorflow的神经网络的MLPs网络,解决用户流失概率的问题。很多人都在问。其实这个网络看起来很清晰,但是写的比较冗长。这里优化了一个版本,方便大家修改后直接使用。
多层感知器网络
直接跟你过核心部分:
1 din _ all=TF . layers . batch _ normalization(inputs=din _ all,name=b1 )
2
3 layer _ 1=TF . layers . dense(din _ all,self.layers_nodes[0],activation=tf.nn.sigmoid,use_bias=True,kernel _ regulator=TF . contrib . layers . L2 _ regulator(self . regulation _ rate),name=f1 )
4layer_1=tf.nn.dropout(layer_1,keep_prob=self.drop_rate[0])
五
6 layer _ 2=TF . layers . dense(layer _ 1,self.layers_nodes[1],activation=tf.nn.sigmoid,use_bias=True,kernel _ regulator=TF . contrib . layers . L2 _ regulator(self . regulation _ rate),name=f2 )
7layer_2=tf.nn.dropout(layer_2,keep_prob=self.drop_rate[1])
八
9 layer _ 3=TF . layers . dense(layer _ 2,self.layers_nodes[2],activation=tf.nn.sigmoid,use_bias=True,kernel _ regulator=TF . contrib . layers . L2 _ regulator(self . regulation _ rate),name=f3 )
在最后的计算过程中,我们定义了多层网络中各层的权重,通过tf.matual进行层间计算,最后通过tf进行正则化。贡献。layers.l2 _ regularizer这次可以通过图像识别中常用的全连接(FC)接口直接计算不同层的权重。我们只需要确定每层的节点数,通过layers_nodes来声明,这样就更清晰了。此外,还增加了辍学部分,以减少过拟合的问题。
Tf.layers.dense接口信息如下:
1tf.layers.dense(
2输入,
3个单位,
4激活=无,
5use_bias=True,
6kernel _ initializer=无
7 bias _ initializer=TF . zeros _ initializer(),
8kernel _ regularizer=无,
9bias _ regularizer=无,
10activity _ regularizer=无,
11kernel _ constraint=无,
12bias _ constraint=无
13可训练=真,
14name=无,
15重复使用=无
16)
Inputs:必选,即要操作的输入数据。
单位:必须,即神经元的数量。
激活:可选;默认值为无;如果没有,就是线性激活。
Use_bias:可选,默认为True,是否使用bias。
Kernel_initializer:可选;默认值为None,即权重的初始化方法;如果没有,将使用默认的Xavier初始化方法。
Bias_initializer:可选;默认值为零初始化,即偏置的初始化方法。
Kernel _ regularizer:可选,缺省为None,对权重施加的正则项。
Bias _ regularizer:可选,缺省为None,对偏差施加的正则项。
Activity _ regularizer:可选,缺省为None,对输出施加的正则化项。
Kernel_constraint,可选,默认为None,是对权重施加的约束项。
Bias_constraint,可选,缺省为None,对偏移量施加的约束项。
可训练:可选;默认值为True如果为真,变量将被添加到GraphKeys。可训练变量。
名称:可选,默认为无,卷积层的名称。
Reuse:可选,默认为None,Boolean类型,如果为True,则如果名称相同,将被重用。
另外,我们之前定义Y和y_的时候,把1转换成了[1,0]和[0,1],增加了工程量。这一次我们通过了:
1 cross _ entropy _ mean=-TF . reduce _ mean(self . y _ * TF . log(self . output 1e-24))
2self.loss=cross _熵_均值
直接计算避免了一些无用功。
最后,之前对梯度的取值没有限制,会造成整体模型波动过大。这个优化也被修改了。有需要也可以参考一下:
1#我们用learning_rate_base作为速率来训练梯度下降损失函数的解,计算限制梯度后的损失。
2 opt=TF . train . gradiendescentoptimizer(self . learning _ rate _ base)
3 train able _ params=TF . train able _ variables()
4 gradients=TF . gradients(self . loss,trainable _ params)
5clip_gradients,_=TF . clip _ by _ global _ norm(gradients,5)
6 self . train _ op=opt . apply _ gradients(zip(clip _ gradients,trainable _ params),global_step=self.global_step)
MLPs是一种入门级的神经网络算法,在实际工业开发中出现的频率并不高。稍后,我将和你谈谈常见的网络,如FM、FFM、DeepFM、NFM、DIN、MLR等。哪些是产业发展中比较常见的,欢迎您的持续关注。
完整的代码已经上传到Github。(见文章开头的提示)
原文链接:https://www.jianshu.com/p/5613f7eed046
更多简洁方便的分类文章和最新课程及产品信息,请移步至全新呈现的“利岱学院官网”:
www.leadai.org
请关注人工智能LeadAI微信官方账号,查看更多专业文章。
大家都在看。
LSTM模型在问答系统中的应用
基于TensorFlow的神经网络解决了用户流失的概观问题。
算法工程师最常见面试问题整理(一)
算法工程师最常见面试问题整理(二)
TensorFlow从1到2 第三章深度学习革命的开端:卷积神经网络
装饰 Python高级编程
今天让我们回顾一下Python基础知识。