关于计算图的问题

来源:7-14 计算图实现

慕沐734317

2019-03-02

关于dropout:
fc1_dropout = tf.contrib.layers.dropout(fc1, keep_prob) 为什么这个输出的shape还是[100, 64],不是应该把神经元dropout了吗,应该是小于64的吧?
关于loss:
cnn中的loss是通过tf.losses.sparse_softmax_cross_entropy(…)直接得到的,这个api输出是一个标量啊,为什么rnn中需要做个tf.reduce_mean(),是不是两个api不一样啊?还有请说一下为什么cnn中输出的是一个标量?
关于上面这个api不是已经把logits给softmax了吗,为什么在后面y_pred = tf.argmax(tf.nn.softmax(logits),…) 中还要加个softmax,这里应该多余了吧?
还有为什么需要给每一个参数关于loss的梯度做一个限制,这样做的目的是什么?如果不做的话会有什么问题?
train_op中没有cnn中的minimize(loss),这样还会是减少loss的吗?是怎么实现训练降低loss的

写回答

1回答

正十七

2019-03-08

“fc1_dropout = tf.contrib.layers.dropout(fc1, keep_prob) 为什么这个输出的shape还是[100, 64],不是应该把神经元dropout了吗,应该是小于64的吧?”

dropout的原理是强制某些位置上的输出为0,而不是减小输出的size。不然的话训练时和测试时的计算图就不一样了。

”cnn中的loss是通过tf.losses.sparse_softmax_cross_entropy(…)直接得到的,这个api输出是一个标量啊,为什么rnn中需要做个tf.reduce_mean(),是不是两个api不一样啊?还有请说一下为什么cnn中输出的是一个标量?“

之前的课程中讲过softmax的计算过程,logits和real_value 输入进来之后,

a. logits 经过softmax后变为概率分布

b. real_value 做one_hot处理变成跟logits同维度的真实分布

c 真实分布和概率分布做交叉熵运算,即每个分量做(y1)log(y2)的运算。然后把结果加起来。

这样cnn中得到的就是标量。

”关于上面这个api不是已经把logits给softmax了吗,为什么在后面y_pred = tf.argmax(tf.nn.softmax(logits),…) 中还要加个softmax,这里应该多余了吧?“

计算图中做softmax会在后面加一个节点来表达softmax后的数据,原来的节点上的数据没变啊。

”为什么rnn中需要做个tf.reduce_mean(),“

rnn中有很多步啊,每一步都有一个标量数据,所以是一个向量,需要做平均。

”还有为什么需要给每一个参数关于loss的梯度做一个限制,这样做的目的是什么?如果不做的话会有什么问题?“

不做的话rnn很容易梯度爆炸。

”train_op中没有cnn中的minimize(loss),这样还会是减少loss的吗?是怎么实现训练降低loss的“

使用梯度下降来降低loss,具体就是计算每个参数的梯度,然后更新为w = w - 步长 * 导数。既然每个参数都是向着使loss变小的方向来移动,那么一般来说loss就会变小的。

0
1
慕沐734317
可是rnn计算loss的时候给的logits只是最后一步的数据,这里做的reduce-mean只能是理解成把一个batch做一个平均啊,可是cnn中也是传入的一个batchsize的数据呀
2019-03-08
共1条回复

深度学习之神经网络(CNN/RNN/GAN)算法原理+实战

深度学习算法工程师必学,深入理解深度学习核心算法CNN RNN GAN

2617 学习 · 935 问题

查看课程