我想制作一个模型来预测输入信号的未来响应,我的网络架构是[3,5,1]:
我的问题是:
我知道在小型网络中需要偏置来改变激活函数。但是在具有多层 CNN、池化、dropout 和其他非线性激活的 Deep 网络的情况下,Bias 真的有所作为吗? 卷积滤波器正在学习局部特征,并且对于给定的 conv 输出通道使用相同的偏差。
这不是这个链接的骗局。上述链接仅解释了偏差在小型神经网络中的作用,并没有试图解释偏差在包含多个 CNN 层、drop-outs、池化和非线性激活函数的深层网络中的作用。
我进行了一个简单的实验,结果表明从 conv 层去除偏差对最终测试精度没有影响。 训练了两个模型,测试准确率几乎相同(没有偏差的一个稍微好一点。)
它们是否仅用于历史原因?
如果使用偏差不能提高准确性,我们不应该忽略它们吗?要学习的参数更少。
如果有人比我有更深入的知识,可以解释这些偏见在深度网络中的重要性(如果有的话),我将不胜感激。
这里是完整的代码和实验结果bias-VS-no_bias实验
batch_size = 16
patch_size = 5
depth = 16
num_hidden = 64
graph = tf.Graph()
with graph.as_default():
# Input data.
tf_train_dataset = tf.placeholder(
tf.float32, shape=(batch_size, image_size, image_size, num_channels))
tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
tf_valid_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)
# Variables.
layer1_weights = tf.Variable(tf.truncated_normal(
[patch_size, patch_size, num_channels, depth], stddev=0.1))
layer1_biases = tf.Variable(tf.zeros([depth])) …Run Code Online (Sandbox Code Playgroud) python bias-neuron deep-learning conv-neural-network tensorflow
我希望实现一个通用的神经网络,1个输入层由输入节点组成,1个输出层由输出节点组成,N个隐藏层由隐藏节点组成.节点被组织成图层,其规则是无法连接同一图层中的节点.
我大多理解偏见的概念,我的问题是:
每层应该有一个偏差值(由该层中的所有节点共享)还是应该每个节点(输入层中的节点除外)都有自己的偏置值?
我有一种感觉,它可以通过两种方式完成,并希望了解每种方法的权衡,并了解最常用的实现方式.
我目前正在 tensorflow 中构建一个 CNN,我正在使用 He 正常权重初始化来初始化我的权重矩阵。但是,我不确定应该如何初始化我的偏差值。我使用 ReLU 作为每个卷积层之间的激活函数。是否有初始化偏差值的标准方法?
# Define approximate xavier weight initialization (with RelU correction described by He)
def xavier_over_two(shape):
std = np.sqrt(shape[0] * shape[1] * shape[2])
return tf.random_normal(shape, stddev=std)
def bias_init(shape):
return #???
Run Code Online (Sandbox Code Playgroud) 我可以创建一个神经网络,我只需要对偏见实现进行澄清.哪种方式更好:B1, B2, .. Bn从权重矩阵中为每个层实现Bias矩阵,在单独的矩阵中,或者通过1在前一层输出(此层的输入)中添加a 来在权重矩阵中包含偏差.在图像中,我问这个实现是否:
或者这个实现:
是最好的.谢谢
machine-learning matrix neural-network dot-product bias-neuron
我想知道:在多层前馈神经网络中,输入层是否应包含偏置神经元,或者这在隐藏层中是否有用?如果是这样,为什么?
谢谢你,
Tunnuz
我正在修改的代码tf.get_variable用于权重变量和tf.Variable偏差初始化.经过一些搜索后,get_variable由于其在共享方面的可移植性,似乎总是应该受到青睐.因此,我尝试将偏差变量更改为get_variable但似乎无法使其工作.
原版的: tf.Variable(tf.zeros([128]), trainable=True, name="b1")
我的尝试: tf.get_variable(name="b1", shape=[128], initializer=tf.zeros_initializer(shape=[128]))
我得到一个错误,说不应该为常量指定形状.但删除形状然后抛出错误没有参数.
我很新,tf所以我可能误解了一些基本的东西.我在这里先向您的帮助表示感谢 :)
initialization machine-learning bias-neuron tensorflow zero-initialization
我昨天发布了一个问题,关于我对XOR运算符的反向传播神经网络所遇到的问题.我做了一些工作,并意识到这可能与没有偏见神经元有关.
我的问题是,偏置神经元的作用一般是什么,它在识别XOR算子的反向传播神经网络中的作用是什么?是否可以创建一个没有偏置神经元?
artificial-intelligence xor backpropagation neural-network bias-neuron
我一直在关注Andrew NG在神经网络上的视频。在这些视频中,他没有将偏见与每个神经元联系在一起。取而代之的是,他在计算出每层的激活后在每层的开头添加一个偏差单位,并将该偏差与计算结果一起用于计算下一层的激活(正向传播)。
然而,在机器学习和喜欢视频的一些其他博客这个,还有与每个神经元相关的偏差。这种差异是什么以及为什么产生什么?它的含义是什么?
我正在构建CNN + Ensemble模型,用于在Python上使用Tensorflow对图像进行分类.我在谷歌图片中抓取了狗和猫的图像.然后将它们更改为126*126像素大小和灰度,将标签0添加到狗,1添加到猫.CNN有5个转换层和2个fc层.HE,PReLU,max-pooling,drop-out,Adam用于模型.参数调整完成后,我添加了Early-Stopping,模型学习了65~70个时代,精度达到了92.5~92.7%.学习结束后,我想把我的CNN模型更改为VGG网络,我检查了我的CNN参数,令人震惊的是,我发现我没有在转换层添加偏移.2 fc层具有偏置但是5转换层没有偏置.所以我在5转换层添加了Bias,但我的模型无法学习.成本增加到无限.
偏差不一定在Deep Convolution Layer?