2018-04-03|2018-04-03 随机dropout
为了预防神经网络过拟合,使用dropout,主要思想好像是每次随机的搞掉一半神经元使它们不能工作,这样训练出来就能防止过拟合。
这里的示例代码还用到了sklearn的数据集。
import tensorflow as tf
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelBinarizerdigits=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=.3)
这里是从sklearn自带的数据集里提取出来,下面是sklearn里的那些数据集,比如digits就是手写体数据集。
In [2]: datasets.load_*?
datasets.load_boston#波士顿房价数据集
datasets.load_breast_cancer#乳腺癌数据集
datasets.load_diabetes#糖尿病数据集
datasets.load_digits#手写体数字数据集
datasets.load_files
datasets.load_iris#鸢尾花数据集
datasets.load_lfw_pairs
datasets.load_lfw_people
datasets.load_linnerud#体能训练数据集
datasets.load_mlcomp
datasets.load_sample_image
datasets.load_sample_images
datasets.load_svmlight_file
datasets.load_svmlight_files
train_test_split这个函数看上去非常有用,其中test_size这个参数是设置测试集的比例,这个例子里还没用到验证集。
keep_prob = tf.placeholder(tf.float32)
xs = tf.placeholder(tf.float32, [None, 64])# 8x8
ys = tf.placeholder(tf.float32, [None, 10])
placeholder里增加了一个keep prob,这里的keep_prob是保留概率,即我们要保留的结果所占比例,它作为一个placeholder,在run时传入, 当keep_prob=1的时候,相当于100%保留,也就是dropout没有起作用。
关于softmax和jcross_entropy的理论看了一些还是不懂,可能要等到以后看其他教程的时候再说吧。
l1 = add_layer(xs, 64, 50, 'l1', activation_function=tf.nn.tanh)
prediction = add_layer(l1, 50, 10, 'l2', activation_function=tf.nn.softmax)cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),reduction_indices=[1]))#losstf.summary.scalar('loss',cross_entropy)
train_step=tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
【2018-04-03|2018-04-03 随机dropout】dropout的内容主要是在增加了一个keep_prob的placeholder 然后放在了
每一步的trainstep的feed_dict里面
for i in range(500):
sess.run(train_step,feed_dict={xs:X_train,ys:y_train,keep_prob:0.5})
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)
推荐阅读
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- 临床统计学学习日志
- Python【习题】(随机生成激活码、优惠码、验证码)
- 微信内如何防止推广链接被封,微信内随机跳转落地页的实现原理
- Python|Python--随机森林模型
- Qt实战|Qt+OpenCV联合开发(十七)--随机数与随机颜色
- R语言模拟和预测ARIMA模型、随机游走模型RW时间序列趋势可视化
- LeetCode-138-复制带随机指针的链表
- R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化
- 硬核 - Java 随机数相关 API 的演进与思考(上)