dropout层_人工智能TensorFlow(十二)Overfitting与dropout代码实现

上期我们分享了TensorFlow的过拟合与dropout的问题过拟合(Overfitting)与dropout,本期我们来实现如何在TensorFlow中利用代码实现overfiting的问题。

40cc15cfc73be6ba66426a05f336d096.png
overfiting问题
我们导入sk-learn的数据,来进行本期的训练分析
import tensorflow as tf
from sklearn.datasets import load_digits
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import LabelBinarizer

初始化数据,定义一个测试数据与一个训练数据
digits = load_digits()
X = digits.data
y = digits.target
y = LabelBinarizer().fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

定义层,这些是往期的代码
def add_layer(inputs, in_size, out_size, layer_name, activation_function=None):
 Weights = tf.Variable(tf.random_normal([in_size, out_size]))
 biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
 Wx_plus_b = tf.matmul(inputs, Weights) + biases
 Wx_plus_b = tf.nn.dropout(Wx_plus_b, keep_prob)
 if activation_function is None:
 outputs = Wx_plus_b
 else:
 outputs = activation_function(Wx_plus_b)
 tf.summary.histogram(layer_name + '/outputs', outputs)
 return outputs

定义 X Y keep_Porb(drop掉的系数)
xs = tf.placeholder(tf.float32, [None, 64]) # 8*8
ys = tf.placeholder(tf.float32, [None, 10])
keep_prob = tf.placeholder(tf.float32)

添加层,定义loss ,初始化函数
# 添加层
lay_one = add_layer(xs, 64, 50, 'lay_one', activation_function=tf.nn.tanh) # 输入层
prediction = add_layer(lay_one, 50, 10, 'lay_two', activation_function=tf.nn.softmax) # 输出层
# loss
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))
tf.summary.scalar('loss', cross_entropy)
train_step = tf.train.GradientDescentOptimizer(0.6).minimize(cross_entropy)
# 初始化
init = tf.global_variables_initializer()
merged = tf.summary.merge_all()

训练TensorFlow,我们搜集一下训练的数据与测试 的数据

with tf.Session() as sess:
 # summary writer
 train_writer = tf.summary.FileWriter("logs/train", sess.graph)
 test_writer = tf.summary.FileWriter("logs/test", sess.graph)
 sess.run(init)
 for i in range(500):
 sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob: 1})

#keep_prob 系数:1是无drop,我们可以使用不同的系数,来对比overfiting的效果
#本期小编使用1 与0.5 的系数对比,通过如下图片可以看出无drop时,2个数据的loss存在明显的差别,当使用0.5的drop时,2个数据的loss几乎完全吻合

 if i % 50 == 0:
 train_result = sess.run(merged, feed_dict={xs: X_train, ys: y_train, keep_prob: 1})
 test_result = sess.run(merged, feed_dict={xs: X_test, ys: y_test, keep_prob: 1})
 train_writer.add_summary(train_result, i)
 test_writer.add_summary(test_result, i)

91f991a034c83eb10985128c4853d62b.png

存在overfiting

78eceaed27a02172afb476d8d27df199.png

无overfiting
如上很多代码都是往期文章分享过的代码,若有网友不清楚代码意义的,可以看小编往期的文章哟。下期分享:
关于TensorFlow的基础知识,我们就分享到这里,从下期开始我们开始使用TensorFlow,来分享一下CNN的基本知识与应用。谢谢大家的点赞与转发,关于分享的文章,大家有任何问题,可以在评论区一起探讨学习!!!

微信搜索小程序:AI人工智能工具

体验不一样的AI 工具

e0f65a80c108408141ec0d7dc594392b.png

e6839f28420dd988b210f3cbb9104685.png
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络的训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底实现原理与方法。本课程将给学员分享深度学习的Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值