首先tensorflow的设计思想就是先把需要用的变量已张量的形式保存,

实际上并没有实质的数值填充。

然后设计网络架构,也仅仅是架构而已,

只能说明数据关系和层与层之间的关系。

真正的数据输入是在主程序入口处,一般如下所示:

看到没,划线部分即为输入!

很多人喜欢用debug调试程序,以获得数据流向,但是对于这些网络确实失败的,因为你啥也看不到。

那么tensorflow就引入了tensorboard这个显示页面,可以让你清晰的观察数据之间的关系,以及数据特点,举个例子如下:

拟合x与y的关系,网络代码如下:

 import tensorflow as tf
import numpy as np #构造输入数据(我们用神经网络拟合x_data和y_data之间的关系)
x_data = np.linspace(-1,1,300)[:, np.newaxis] #-1到1等分300份形成的二维矩阵
noise = np.random.normal(0,0.05, x_data.shape) #噪音,形状同x_data在0-0.05符合正态分布的小数
y_data = np.square(x_data)-0.5+noise #x_data平方,减0.05,再加噪音值 #输入层(1个神经元)
xs = tf.placeholder(tf.float32, [None, 1]) #占位符,None表示n*1维矩阵,其中n不确定
ys = tf.placeholder(tf.float32, [None, 1]) #占位符,None表示n*1维矩阵,其中n不确定 #隐层(10个神经元)
W1 = tf.Variable(tf.random_normal([1,10])) #权重,1*10的矩阵,并用符合正态分布的随机数填充
b1 = tf.Variable(tf.zeros([1,10])+0.1) #偏置,1*10的矩阵,使用0.1填充
Wx_plus_b1 = tf.matmul(xs,W1) + b1 #矩阵xs和W1相乘,然后加上偏置
output1 = tf.nn.relu(Wx_plus_b1) #激活函数使用tf.nn.relu #输出层(1个神经元)
W2 = tf.Variable(tf.random_normal([10,1]))
b2 = tf.Variable(tf.zeros([1,1])+0.1)
Wx_plus_b2 = tf.matmul(output1,W2) + b2
output2 = Wx_plus_b2 #损失
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-output2),reduction_indices=[1])) #在第一维上,偏差平方后求和,再求平均值,来计算损失
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 使用梯度下降法,设置步长0.1,来最小化损失 #初始化
init = tf.global_variables_initializer() #初始化所有变量
sess = tf.Session()
sess.run(init) #变量初始化 #训练
for i in range(1000): #训练1000次
_,loss_value = sess.run([train_step,loss],feed_dict={xs:x_data,ys:y_data}) #进行梯度下降运算,并计算每一步的损失
if(i%50==0):
print(loss_value) # 每50步输出一次损失
 

加入tensorboard后的代码如下:

 import tensorflow as tf
import numpy as np
max_steps=1000
learning_rate=0.001 #学习率
dropout=0.9 #保留的数据
log_dir='./logs/xyhuashuguanxi' sess=tf.InteractiveSession() #构造输入数据(我们用神经网络拟合x_data和y_data之间的关系)
x_data = np.linspace(-1,1,300)[:, np.newaxis] #-1到1等分300份形成的二维矩阵
noise = np.random.normal(0,0.05, x_data.shape) #噪音,形状同x_data在0-0.05符合正态分布的小数
y_data = np.square(x_data)-0.5+noise #x_data平方,减0.05,再加噪音值 with tf.name_scope('input'):#with块中名字才是最重要的一个块
#输入层(1个神经元)
x = tf.placeholder(tf.float32, [None, 1]) #占位符,None表示n*1维矩阵,其中n不确定
y = tf.placeholder(tf.float32, [None, 1]) #占位符,None表示n*1维矩阵,其中n不确定 #定义神经网络的初始化方法
def weight_varible():
# initial=tf.truncated_normal(shape,stddev=0.1) #截断正态分布 这里可以用he_initinelize
initial =tf.Variable(tf.random_normal([1, 10])) # 权重,1*10的矩阵,并用符合正态分布的随机数填充
return tf.Variable(initial) #创建一个变量 def bias_variable(): #截距
# initial = tf.constant(0.1,shape=shape)
initial= tf.Variable(tf.zeros([1, 10]) + 0.1)
return tf.Variable(initial) #以下代码是关于画图的,
# 定义variable变量的数据汇总函数,我们计算出变量的mean、stddev、max、min
#对这些标量数据使用tf.summary.scalar进行记录和汇总,使用tf.summary.histogram直接记录变量var的直方图数据
def variable_summaries(var):
with tf.name_scope('summaries'):
mean=tf.reduce_mean(var)
tf.summary.scalar('mean',mean)
with tf.name_scope('stddev'):
stddev=tf.sqrt(tf.reduce_mean(tf.square(var-mean))) tf.summary.scalar('stddev',stddev)
tf.summary.scalar('max',tf.reduce_max(var))
tf.summary.scalar('min',tf.reduce_min(var))
tf.summary.histogram('histogram',var) # 设计一个MLP多层神经网络来训练数据,在每一层中都对模型数据进行汇总
def nn_layer(input_tensor, layer_name, act=tf.nn.relu):
with tf.name_scope(layer_name):
# 定义一个隐藏层input_dim上一层 output_dim本层输出
with tf.name_scope('weights'):
weights = weight_varible() # shape传进来是上一层输入,
# 本层输出如果是MLP,就是全连接可以知道参数个数
variable_summaries(weights) # 把权重的各个中标(方差+平均值)进行总结
with tf.name_scope('biases'):
biases = bias_variable()
variable_summaries(biases)
with tf.name_scope('Wx_plus_b'):
preactivate = tf.matmul(input_tensor, weights) + biases # 带到激活函数之前的公式
tf.summary.histogram('pre_activations', preactivate)
activations = act(preactivate, name='activations')
# 运用激活函数 函数里面传函数 高阶函数
return activations #隐层(10个神经元)
hidden1=nn_layer(x,'layer1') #建立第一层 隐藏层
# with tf.name_scope('dropout'):
# keep_prob=tf.placeholder(tf.float32)
# tf.summary.scalar('dropout_keep_probability',keep_prob)
# dropped=tf.nn.dropout(hidden1,keep_prob) #应用drop_out函数,保留下来的数据 # W1 = tf.Variable(tf.random_normal([1,10])) #权重,1*10的矩阵,并用符合正态分布的随机数填充
# b1 = tf.Variable(tf.zeros([1,10])+0.1) #偏置,1*10的矩阵,使用0.1填充
# Wx_plus_b1 = tf.matmul(x,W1) + b1 #矩阵xs和W1相乘,然后加上偏置
# output1 = tf.nn.relu(Wx_plus_b1) #激活函数使用tf.nn.relu #然后使用nn_layer定义神经网络输出层,其输入维度为上一层隐含节点数500,输出维度为类别数10,
# 同时激活函数为全等映射identity,暂时不适用softmax
#然后使用nn_layer定义神经网络输出层,其输入维度为上一层隐含节点数500,输出维度为类别数10,
# 同时激活函数为全等映射identity,暂时不适用softmax
# output2 =nn_layer(dropped,'layer2',act=tf.identity)#建立第二层 输出层
#输出层(1个神经元)
W2 = tf.Variable(tf.random_normal([10,1]))
b2 = tf.Variable(tf.zeros([1,1])+0.1)
Wx_plus_b2 = tf.matmul(hidden1,W2) + b2
output2 = Wx_plus_b2 #损失
#使用tf.nn.softmax_cross_entropy_with_logits()对前面的输出层的结果进行softmax处理并计算
# 交叉熵损失cross_entopy,计算平均损失,使用tf.summary.scalar进行统计汇总
with tf.name_scope('cross_entropy'):
# diff=tf.nn.softmax_cross_entropy_with_logits(logits=y,labels=y)
loss = tf.reduce_mean(tf.reduce_sum(tf.square(y - output2), reduction_indices=[1])) # 在第一维上,偏差平方后求和,再求平均值,来计算损失
#输出层给出结果logits=y,每一行的y是有10个数预测10个值,然后利用这10个值做归一化,
# 然后具备一个概率的含义,第二不计算交叉熵
with tf.name_scope('total'):
cross_entropy=tf.reduce_mean(loss)#平均损失
tf.summary.scalar('cross_entorpy',cross_entropy) # loss = tf.reduce_mean(tf.reduce_sum(tf.square(y-output2),reduction_indices=[1])) #在第一维上,偏差平方后求和,再求平均值,来计算损失
#下面使用Adam优化器对损失进行优化,同时统计预测正确的样本数并计算正确率accuracy,汇总
with tf.name_scope('train'):
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) # 使用梯度下降法,设置步长0.1,来最小化损失 #Adamoptimizer比SGD更好一些,下降速度更快,更容易计算局部最优解,当数据量大的时候不如SGD
#learning_rate虽然是固定的,后面会自适应,根据上一次的结果,所以大数据量的话,不如定义好策略,这样省时间
with tf.name_scope('accuracy'):
with tf.name_scope('correct_predicition'):
correct_predition=tf.equal(tf.argmax(y,1),tf.argmax(output2,1))
#预测值最大的索引和真实值的索引
with tf.name_scope('accuracy'):
accuracy=tf.reduce_mean(tf.cast(correct_predition,tf.float32))
#true 1 false 0 reduce_mean 是一个比例得到的结果
tf.summary.scalar('accuracy',accuracy) #因为我们之前定义了太多的tf.summary汇总操作,注意执行这些操作太
# 麻烦,使用tf.summary.merge_all()直接获取所有汇总操作,以便后面执行
merged=tf.summary.merge_all()
#定义两个tf.summary.FileWirter文件记录器在不同的子目录,分别用来存储训练和测试的日志数据
train_writer=tf.summary.FileWriter(log_dir+'/train',sess.graph)
test_writer=tf.summary.FileWriter(log_dir+'/test')
#同时,将Session计算图sess.graph加入训练过程,这样在TensorBoard的GRAPHS窗口中就能展示
# 整个计算图的可视化效果,最后初始化全部变量
tf.global_variables_initializer().run() #初始化
init = tf.global_variables_initializer() #初始化所有变量
sess = tf.Session()
sess.run(init) #变量初始化 # #定义feed_dict函数,如果是训练,需要设置dropout,如果是测试,keep_prob设置为1
# def feed_dict(train):
# if train:#如果是训练数据的话需要droupout,测试的时候不要Droupout
# xs,ys= mnist.train.next_batch(100) #每一次拿一批次数据去训练
# k=dropout
# else:
# xs,ys=mnist.test.images,mnist.test.labels #真正测试的话全部测试,不是拿一批次的数据了
# k=1.0
# return {x:xs,y_:ys,keep_prob:k} #执行训练、测试、日志记录操作。创建模型的保存器
saver=tf.train.Saver()
#训练
for i in range(max_steps): #训练1000次
# _,loss_value = sess.run([train_step,loss],feed_dict={x:x_data,y:y_data}) #进行梯度下降运算,并计算每一步的损失
if(i%50==0):
summary, loss_value = sess.run([merged, accuracy], feed_dict={x:x_data,y:y_data})
test_writer.add_summary(summary, i) # 然后写出
print('Accuracy at step %s:%s' % (i, loss_value))
print(loss_value) # 每50步输出一次损失 train_writer.close()
test_writer.close()

运行后,打开cmd,进入到logs文件的根目录下(一定要!!!),输入tensorboard --logdir=logs的根目录,等下会输出网址,在你的浏览器打开就可以了:

或者在浏览器中直接输入

 http://localhost:6006 
还是不行的话,可能和你的电脑配置有关。

使用tensorflow设计的网络模型看不到数据流向怎么办的更多相关文章

  1. 设计人员应该看的15个很酷的 iOS 8 设计

    苹果新一代智能手机 iPhone 6 发布已经有一段时间了,一些创意设计师已经开始在设计中采用 iOS 8 设计理念.当然,其中有些是对于未来的展望和大胆的设计.我在这里收集了15个很酷的 iOS 8 ...

  2. 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

    一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...

  3. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 主管可以看下属的数据

    主管可以看下属的数据,这个是经常用到的一个权限,不管是大公司,还是小公司都需要的功能. 通过以下2个方法,可以任意达到想要的效果了,设置简单灵活,还能递归运算下属,有时候简单好用就是硬道理. #reg ...

  4. TensorFlow TFRecord封装不定长的序列数据(文本)

    TensorFlow TFRecord封装不定长的序列数据(文本) 在实验室环境中,通常数据都是一次性导入内存的,然后使用手工写的数据mini-batch函数来切分数据,但是这样的做法在海量数据下显得 ...

  5. 通过TensorFlow训练神经网络模型

    神经网络模型的训练过程其实质上就是神经网络参数的设置过程 在神经网络优化算法中最常用的方法是反向传播算法,下图是反向传播算法流程图: 从上图可知,反向传播算法实现了一个迭代的过程,在每次迭代的开始,先 ...

  6. 利用Tensorflow实现神经网络模型

    首先看一下神经网络模型,一个比较简单的两层神经. 代码如下: # 定义参数 n_hidden_1 = 256 #第一层神经元 n_hidden_2 = 128 #第二层神经元 n_input = 78 ...

  7. UI设计初学者必看,这款设计神器教你快速入门

    网络时代,网页和手机App已经深入到人们生活的方方面面.这也使得App界面设计越来越受青年求职者们的青睐,并纷纷投入这个行业.但是,作为UI设计初学者,究竟如何才能快速的入门?当今市场上,是否有那么一 ...

  8. 打开黑盒:从 MySQL架构设计出发,看它是如何执行一条 SQL语句的

    1.把MySQL当个黑盒子一样执行SQL语句 我们的系统采用数据库连接池的方式去并发访问数据库,然后数据库自己其实也会维护一个连接池,其中管理了各种系统跟这台数据库服务器建立的所有连接 当我们的系统只 ...

  9. 吴裕雄 PYTHON 神经网络——TENSORFLOW 双隐藏层自编码器设计处理MNIST手写数字数据集并使用TENSORBORD描绘神经网络数据2

    import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data os.envi ...

随机推荐

  1. 定制Banner

    1.修改Banner (1)在SpringBoot启动的时候会有一个默认启动的图案 (2)在src/main/resources下新建一个banner.txt (3)通过http://patorjk. ...

  2. vs移动团队项目集合

    vs移动团队项目集合: https://msdn.microsoft.com/zh-cn/library/vs/alm/dd936138(v=vs.120)/css

  3. HDU3308 线段树区间合并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...

  4. PHP中MySQL数据库连接,数据读写,修改方法

    MySQL连接大的来说有两种方法,一种是mysqli,另一种是mysql.php为连接MySQL提供了函数库,有mysql和mysqli,mysqli是mysql函数库的扩展,是php5才支持的.当你 ...

  5. Missing map from Nullable`1 to String. Create using Mapper.CreateMap<Nullable`1, String>. 解决办法

    这是一个叫做AutoMapper的插件,主要功能是让两个类的内容进行映射,最常见的例子就是EF查询出的内容映射到一个实体类上去然后返回这个实体类例如: Mapper.CreateMap(); 如果这时 ...

  6. UVA 11600 Masud Rana(概率dp)

    当两个城市之间有安全的道路的时候,他们是互相可到达的,这种关系满足自反.对称和传递性, 因此是一个等价关系,在图论中就对应一个连通块. 在一个连通块中,当前点是那个并不影响往其他连通块的点连边,因此只 ...

  7. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)

    点此看题面 大致题意: 给你\(N\)个单词,请你求出每一个单词在这\(N\)个单词中出现的次数. 相关题目 这道题应该是洛谷上一道板子题的升级版. \(AC\)自动机 这是一道\(AC\)自动机的简 ...

  8. HP刀片服务器安装系统步骤

    原文链接 HP刀片服务器安装系统步骤: HP刀片使用一个叫OA(Onboard Administrator)的管理平台统一进行管理,具有很高的集成性,同时使用起来也很简单方便,通过IE浏览器输入IP地 ...

  9. java基础编程——重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  10. install cmake,install torch7

    cmake http://blog.csdn.net/jesse__zhong/article/details/21290675 torch7 http://wanghaitao8118.blog.1 ...