'''

思路:
1、调用数据集 2、定义用来实现神经元功能的函数(包括解决过拟合) 3、定义输入和输出的数据
4、定义隐藏层(函数)和输出层(函数) 5、分析误差和优化数据(改变权重)
6、执行神经网络

'''
import tensorflow as tf
from sklearn.datasets import load_digits
from sklearn.model_selection 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)#分配数据
'''

扩展知识点
train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和test data,形式为: 
X_train,X_test, y_train, y_test = cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)
参数代表含义: 
train_data:所要划分的样本特征集 
train_target:所要划分的样本结果 
test_size:样本占比,如果是整数的话就是样本的数量 
random_state:是随机数的种子。
'''
print(len(X_train))

#定义用来实现神经元功能的函数
def add_layer(inputs,in_size,out_size,keep_prob,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_Bx = tf.matmul(inputs,Weights)+biases
#在这里处理过拟合
  Wx_plus_b = tf.nn.dropout(Wx_plus_Bx,keep_prob)
  if activation_function==None:
    outputs = Wx_plus_b
  else:
    outputs = activation_function(Wx_plus_b)

  tf.summary.histogram(layer_name+'/outputs',outputs)
  return outputs

#定义输入和输出的数据

x_data = tf.placeholder(tf.float32,[None,64])#这是因为sklearn中的手写图片的像素和、为8*8
y_data = tf.placeholder(tf.float32,[None,10])#数字只有10个
keep_prob = tf.placeholder(tf.float32)#定义过拟合数

#定义隐藏层和输出层
layer = add_layer(x_data,64,50,keep_prob,'l1',tf.nn.tanh)#隐藏层
prediction = add_layer(layer,50,10,keep_prob,'l2',tf.nn.softmax)#输出层

#分析误差和优化数据
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_data*tf.log(prediction),reduction_indices=[1]))

scalar_loss = 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()#定义一个图框

'''
因为sess是在sess的时候才出现的,所以应该写在sess的面
train_writer = tf.summary.FileWriter('logs/train',sess.graph)
test_writer = tf.summary.FileWriter('logs/test',sess.graph)
'''

#执行
with tf.Session()as sess:
  sess.run(init)
  #写入网页,这当中只有histogram和scaler同时出现才能写入网页
  train_writer = tf.summary.FileWriter('Logs/train',sess.graph)
  test_writer = tf.summary.FileWriter('Logs/test',sess.graph)
  for i in range(1000):
    sess.run(train_step,feed_dict = {x_data:X_train,y_data:y_train,keep_prob:0.6})
    if i%50==0:
      train_result = sess.run(merged,feed_dict={x_data:X_train,y_data:y_train,keep_prob:1})
'''
这个merged会自动的将预测值的精确度求出来
'''
      test_result = sess.run(merged,feed_dict={x_data:X_test,y_data:y_test,keep_prob:1})
      train_writer.add_summary(train_result,i)#将数据划入图中
      test_writer.add_summary(test_result,i)#将数据划入图中

'''
这里出现一个错误:就是test_result = sess.run(scalar_loss,feed_dict={x_data:X_test,y_data:y_test,keep_prob:1})
train_result = sess.run(scalar_loss,feed_dict={x_data:X_train,y_data:y_train,keep_prob:1})中的scalar_loss
改为merged的时候,再次执行就会报错
解决办法
1、我们可以关机,然后把logs文件里面的东西删除,然后在执行一次。因为他是系统日志文件
2、由于我,这里只是想损失函数loss通过tensorboard显示出来而已,并且字典表也正常赋值了:
result = sess.run(merged,feed_dict={xs:x_data,ys:y_data})
一切都很正常,想来想去感觉这个函数应该可以采用其他方式替换:
merged = tf.summary.merge_all()
这是tensorflow提供的合并所有summary信息的api,但是我只是想合并损失函数loss的summary
'''

tensorflow学习之路---解决过拟合的更多相关文章

  1. tensorflow学习之路-----MNIST数据

    ''' 神经网络的过程:1.准备相应的数据库 2.定义输入成 3.定义输出层 4.定义隐藏层 5.训练(根据误差进行训练) 6.对结果进行精确度评估 ''' import tensorflow as ...

  2. TensorFlow学习之路1-TensorFlow介绍

    TensorFlow是一个采用数据流图(data flow graphs),用于数据计算的开源软件库. 什么是数据流图? TensorFlow的数据流图是由“节点”(nodes)和“线”(edges) ...

  3. tensorflow学习之路-----卷积神经网络个人总结

    卷积神经网络大总结(个人理解) 神经网络 1.概念:从功能他们模仿真实数据 2.结构:输入层.隐藏层.输出层.其中隐藏层要有的参数:权重.偏置.激励函数.过拟合 3.功能:能通过模仿,从而学到事件 其 ...

  4. tensorflow学习之路----保存和提取数据

    #保存数据注意他只能保存变量,不能保存神经网络的框架.#保存数据的作用:保存权重有利于下一次的训练,或者可以用这个数据进行识别#np.arange():arange函数用于创建等差数组,使用频率非常高 ...

  5. tensorflow学习之路-----简单卷积神经网路

    import tensorflow as tf#取数据,目的是辨别数字from tensorflow.examples.tutorials.mnist import input_data'''手动添加 ...

  6. tensorflow学习之路---Session、Variable(变量)和placeholder

    ---恢复内容开始--- 1.Session '''Session.run():首先里面的参数是一个API(函数的接口)的返回值或者是指定参数的值:功能:得知运算结果有两种访问方式:直接建立或者运用w ...

  7. tensorflow学习之路---简单的代码

    import numpyimport tensorflow as tf #自己创建的数据x_data = numpy.random.rand(100).astype(numpy.float32)#创建 ...

  8. TensorFlow学习路径【转】

    作者:黄璞链接:https://www.zhihu.com/question/41667903/answer/109611087来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. TensorFlow学习线路

    如何高效的学习 TensorFlow 代码? 或者如何掌握TensorFlow,应用到任何领域? 作者:黄璞链接:https://www.zhihu.com/question/41667903/ans ...

随机推荐

  1. 在pycharm中配置Anaconda以及pip源配置

    在学习推荐系统.机器学习.数据挖掘时,python是非常强大的工具,也有很多很强大的模块,但是模块的安装却是一件令人头疼的事情. 现在有个工具--anaconda,他已经帮我们集成好了很多工具了!an ...

  2. Android平台Camera实时滤镜实现方法探讨(九)--磨皮算法探讨(一)

    上一篇开头提到了一些可用于磨皮的去噪算法.以下我们实现这些算法而且观察效果,咱不考虑实时性的问题 本文首先探讨的首先是<基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用> 该 ...

  3. Vim 批量替换

    假设在非Win系统下. 想批量替换文本不再是Ctrl+F那么简单了, 一般用Vim来做批量替换, 略微复杂点: 比如将192.168.0.1替换为192.168.0.2 :%s/192.168.0.1 ...

  4. 怎样解除内容审查程序的password

    如题:怎样解除内容审查程序的password 在不知道password的情况下.通过改动注冊表解决.点击"開始"→"执行",输入"regedit&qu ...

  5. Delphi的时间 x87 fpu control word 精度设置的不够

    在win7 64位系统下, 一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的).比如: 40725.0001597563 + 0.7 ...

  6. ios下微信浏览器如何唤醒app?app已上架应用宝

    android下可以通过在应用宝微下载地址后面加参数&android_schema='应用schema'来实现,ios下如何实现? ios下微信浏览器如何唤醒app?app已上架应用宝 > ...

  7. 日常基础—————echo,print,print_r,var_dump的区别

    1.echo   函数输出一个或多个字符串. 代码: header("Content-Type:text/html; charset=utf-8"); echo "你好” ...

  8. 通俗易懂的Git使用入门教程

    原文链接:点我 首先新司机接触 Git 和 Github 可能会搞不清楚两者之间的关系,这里稍微解释一下: 1.Git是一款免费.开源的分布式版本控制系统 2.Github是用Git做版本控制的代码托 ...

  9. HDU-2045 不容易系列之(3)—— LELE的RPG难题 找规律&递推

    题目链接:https://cn.vjudge.net/problem/HDU-2045 找规律 代码 #include <cstdio> long long num[51][2]; int ...

  10. python Web抓取(一)[没写完]

    需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...