当前位置:首页 > 专题范文 > 公文范文 >

tensorFlow使用心得【完整版】

时间:2022-07-11 17:30:04 浏览量:

下面是小编为大家整理的tensorFlow使用心得【完整版】,供大家参考。

tensorFlow使用心得【完整版】

 

 tensorFlow 使用心得(使用中的一些坑)作为 tensorFlow 平台使用的新手,笔者在调试过程中遇到了很多坑,这里把一些作为教训贡献出来供大家参考。1. tensorFlow 数组的维度问题由于 tensorFlow 的计算图是静态的,所以需要一开始进行计算题的定义,由于在定义神经网路的前向传播过程中,涉及到数组之间的运算,所以很容易出现一些隐性的错误(语法没错,但是结果不对),特别是涉及到一维数组的运算。在神经网路的教材中,一般对某个层的权重定义的形式是? ?하ߎ其中 j 是输出层的个数,k 是输入层的格式,这样在前向传播模型中,输出层的激活值表示为Wx plus b = ? ?하ߎ ? 浐 ޽ ݇这里的 x 是表示输入的激活值,shape=(k,1),b 是输出神经元的阈值向量,shape=(j,1)。但是在很多 tensorFlow 的代码中,都习惯写成Wx plus b = ? ߎ하? ? 浐 ޽ ݇这样在定义 x 和 b 的时候维度就会发生改变,如果此时不注意的话就会发生以下错误。在 tensorFlow 里很多人在初始化权重和阈值的时候是按照如下方式写的

 Weights = get_weights_variable([in_size, out_size],regularizer)biases = tf.Variable(tf.random_normal([out_size], stddev=1))Wx_plus_b=tf.matmul(input_tensor, Weights)+biases在这里 biases 是一个一维向量,其形状是 shape=(out_size, ),由于input_tensor 是一个 shape=(1,in_size)的二维数组,所以 Wx 的结果tf.matmul(input_tensor, Weights)的 shape=(1,out_size)。有一 biase 是一维数组,而 tf.matmul(input_tensor, Weights)的 shape=(1,out_size),则最终的 Wx_plus_b 的 shape=(1,out_size)。如果你还是习惯用神经网络基础理论里提到的模式进行编程Weights = get_weights_variable([out_size, in_size],regularizer)biases = tf.Variable(tf.random_normal([out_size,1], stddev=1))Wx_plus_b=tf.matmul(input_tensor, Weights)+biases注意,这里的 biases 是一个二维数组,其形状为 shape=(out_size,1),此时 input_tensor 的 shape=(in_size,1),最终得到的 Wx_plus_b 的shape=(out_size,1)。如果一切按照这个形式来没问题,但是如果在第二种情形下,对 biases 初始化时,还是沿用第一种编程方式里提到的手段biases = tf.Variable(tf.random_normal([out_size], stddev=1))这时,由于python的broadencast原则,因为tf.matmul(input_tensor,Weights)是一个形状为 shape=(out_size,1)的二维数组,而 biases 是shape=(out_size, )的一维数组,最后相加的结果是一个shape=(out_size,out_size)的二维数组,这样传到下一层网络的时候

 就会出错。这样因为维度造成错误的例子很多,特别是涉及到一些规约运算例如 tf.reduce_mean()等等,还有一些规约求和tf.reduce_sum()在 tensorFlow 里有一个函数在分类任务中使用的特别多tf.nn.sparse_softmax_cross_entropy_with_logits(logits,labes)注意这个函数的 logits 和 labels 的格式是[batch_size, class_num]即,对于这个二维数组来说,行数是实例个数,列数表示类别数,labels 是一个[batch_size, ]的一维数组还有,对于 tensorFlow 程序,千万别忘了,还有 feed_dict={X:x,Y:Y}需要给出,要不然根本没法执行。

推荐访问:完整版 使用心得 tensorFlow