某小伙0基础入门深度学习,代码演示Tensorflow 计算图基础

某小伙0基础入门深度学习,代码演示Tensorflow 计算图基础
2018年05月18日 14:16 ai人工智能angtk

1、计算图

讲到计算图,就能和分布式的计算流程扯上关系,下面讲讲计算图的区别

tensorflow和Spark的图计算流程差不多

1.1 最基础的单元

a、Spark的计算图最基础的单元是rdd(弹性分布式数据集,是一种数据结构,可以是数组,也可以是一个分区文件)但rdd存储通常是key-value形式;

b、tensorflow计算图最基础的单元则是张量(同样是一种数据结构,也可以是数组)

1.2 数据能够被切分

a、spark对于不同分区的rdd可以分别读取;

b、tensorflow对于图像数据集量比较大的时候同样可以切片,分批量训练;

1.3 由一个函数或者op节点进行计算

a、在spark中有rdd算子运算;

b、在tensorflow对应着不同op节点对每个分区的数据集进行运算;

1.4 具有方向性

计算图中最明显的一个特征就是具有方向性,意味着每一个步骤都有先后顺序,

相信使用tensorflow的朋友构建神经网络的时候就会发现每一层之间是环环相扣的;

1.5 阶段图

a、spark中的整体计算图分为阶段式计算图,每个stage对应着不同的计算图;

b、tensorflow初始化则是默认的图,当然可以根据自己需要定义不同名称的图,这种形态后和spark的阶段图有点类型;

2、Tensorflow中的tensorboard的基本解释和用法

#tf.name_scope() 给graph增加层级#tf.summary.scalar 标量统计结果#loss以及准确率分布等#tf.summary.images 图片统计结果#tf.summary.audio 音频统计结果#tf.distributions#横轴为训练步数,纵轴为权重,图形为max,93%,84%,69%,50%,31%,16%,7%,min权重分布#tf.summary.histogram 取值分布结果#histogram 两种模式:#overlay 横轴为权重,纵轴为频数,选择时为步数# offset 横轴为权重,纵轴为训练步数,选择时为频数

tf.summary.merge_all()将summary中的操作合并

定义各个图和节点,示例如下所示,完成之后可以在命令进行相应的logs文件夹

使用tensorboard —logdir=logs 启动tensorboard ,进入127.0.0.1:+相应端口号即可打开相应的web界面

import tensorflow as tfimport numpy as npdef add_layer(inputs,in_size,out_size,n_layer,active_function=None): layer_name="layer%s"%n_layer with tf.name_scope(layer_name): with tf.name_scope("weights"): Weights=tf.Variable(tf.random_normal([in_size,out_size]),name="W") tf.summary.histogram(layer_name+"/weights",Weights) with tf.name_scope('biases'): biases=tf.Variable(tf.zeros([1,out_size])+0.1,name="b") tf.summary.histogram(layer_name+"/biases",biases) with tf.name_scope("wx_b"): predict=tf.add(tf.matmul(inputs, Weights), biases) if active_function is None: outputs=predict else: outputs=active_function(predict) tf.summary.histogram(layer_name+"/outputs",outputs) return outputsx_data=np.linspace(-1,1,300)[:,np.newaxis]biases=np.random.normal(0,0.05,x_data.shape)y_data=np.square(x_data)-0.5+biaseswith tf.name_scope("inputs"): train_x=tf.placeholder(tf.float32,[None,1],name="x_input") label=tf.placeholder(tf.float32,[None,1],name="y_input")l1=add_layer(train_x,1,10,n_layer=1,active_function=tf.nn.relu)l2=add_layer(l1,10,1,n_layer=2,active_function=None)with tf.name_scope("loss"): loss=tf.reduce_mean(tf.reduce_sum(tf.square(label-l2),reduction_indices=[1])) tf.summary.scalar("loss",loss)with tf.name_scope("train"): train=tf.train.GradientDescentOptimizer(0.05).minimize(loss)sess=tf.Session()init=tf.global_variables_initializer()merge = tf.summary.merge_all()writer= tf.summary.FileWriter("logs/", sess.graph)sess.run(init)for i in range(5000): sess.run(train,feed_dict={train_x:x_data,label:y_data}) if i%50==0: print(sess.run(loss,feed_dict={train_x:x_data,label:y_data})) result=sess.run(merge,feed_dict={train_x:x_data,label:y_data}) writer.add_summary(result,i)

由于作者水平有限,欢迎参照指正

加入我们,给小编辑留言。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部