gpt4 book ai didi

python - Tensorflow - tf.nn.conv2D() 中的权重值是否发生变化?

转载 作者:行者123 更新时间:2023-11-30 09:52:16 25 4
gpt4 key购买 nike

当我使用 tensorflow 学习神经网络时,我遇到了一些关于 tf.nn.conv2D(x, W, strides=[1, 1, 1, 1], padding='SAME') 的问题

当我输入图像值x和权重值W(由tf.truncated_normal(shape, stddev=0.1)初始化)时,我知道它会返回一些值,这是tf.nn.conv2D()的结果。

但我的问题是,当调用 tf.nn.conv2D() 时,它会改变权重值吗?

如果改变 Weight 的值,它是如何工作的?事实上,当我打印重量值时,它会发生变化。但我不知道为什么......我的假设是值 W 是某种按引用调用,因此在计算 tf.nn.conv2D() 时,值 W 发生了变化。是吗?

最佳答案

Tensorflow 代码流与传统的编程语言不同。首先,从代码创建一个图表(可以使用 Tensorboard 进行可视化,然后使用内部实现的反向传播计算更新规则。

当你写下:

h = tf.nn.conv2D(x, W, strides=[1, 1, 1, 1], padding='SAME')

它在您的神经网络中创建一个卷积层,该层对您的输入矩阵执行卷积 ( http://cs231n.github.io/convolutional-networks/ ) 并在 h 中输出结果。现在,执行此类卷积的全部目的是识别一些局部模式,例如图像中的垂直或水平边缘。例如,权重矩阵W

W = [[0,1,0],[0,1,0],[0,1,0]]

将识别图像中的垂直边缘。但是,由于 W 已在此处随机初始化

W = tf.Variable(tf.truncated_normal(shape, stddev=0.1)))

一开始就无法找到任何模式。这是通过反向传播解决的。

当您在标记数据上训练神经网络时,每一步都会更新矩阵W,从而减少误差 E 对 W 的导数。您无法在代码中看到这种情况发生,因为反向传播是在 Tensorflow 内部实现的,您只需为前向传播编写代码。如果您将 W 定义为

W = tf.Variable(tf.truncated_normal(shape, stddev=0.1)),trainable=False)

它不会更新,但这样训练参数的整个目的就会落空。

我建议您浏览http://neuralnetworksanddeeplearning.com在继续使用 Tensorflow 之前,请先了解神经网络的工作原理。

关于python - Tensorflow - tf.nn.conv2D() 中的权重值是否发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com