用于图像识别的神经网络可真的很大。可以有数千个输入/隐藏的神经元,数百万个连接,这会占用大量的计算机资源。
虽然在C++中float通常是32bit和双64bit,但它们在速度上没有太大的性能差异,但使用float可以节省一些内存。
有了一个神经网络,什么是用sigmoid作为激活函数,如果我们可以选择神经网络中哪些变量可以浮点或双变量可以浮点,以节省内存而不使神经网络无法执行?
而训练/测试数据的输入和输出肯定是浮点,因为图像颜色只能在0-255的范围内,当归一化0.0-1.0尺度时,单位值为1/255=0.0039~
1.隐藏神经元的输出精度如何,让它们也浮起来是否安全?
隐层神经元的输出值取自上一层神经元的输出值*其与当前正在计算的神经元的连接权值之和,然后将之和传递给激活函数(当前为sigmoid)得到新的输出值。Sum变量本身可以是双倍,因为当网络很大时,它可能变成一个很大的数字。
由于sigmoid的存在,当输入和神经元的输出在0-1.0的范围内时,允许权值大于该范围。
由于激活函数的导数,随机梯度下降反向传播在消失梯度问题上遇到了困难,我决定不把它作为梯度变量应该是什么精度的问题来讨论,因为我觉得浮点会不够精确,特别是当网络很深的时候。
在任何地方使用float32
通常是大多数神经网络应用的安全首选。GPU目前只支持float32
,所以很多从业者到处坚持float32
。对于许多应用,即使是16位浮点值也足够了。一些极端的例子表明,每权重仅需2位就可以训练出高精度的网络(https://arxiv.org/abs/1610.00324)。
深度网络的复杂度通常不受计算时间的限制,而是受单个GPU上RAM的数量和内存总线的吞吐量的限制。即使您使用的是CPU,使用较小的数据类型仍然有助于更有效地使用缓存。您很少受到计算机数据类型精度的限制。
如果输入在[0,255]范围内,则平均输入为~100,权值为~1,则激活电位(激活函数的参数)将为~100×N,其中N是层输入的数量,可能位于Sigmoid的“平坦”部分。因此,要么将权重初始化为~1/(100×N),要么缩放数据并使用任何流行的初始化方法。否则,网络将不得不花费大量的训练时间来使权重达到这样的规模。
由于激活函数的导数,随机梯度下降反向传播在消失梯度问题上遇到了困难,我决定不把它作为梯度变量应该是什么精度的问题来讨论,因为我觉得浮点会不够精确,特别是当网络很深的时候。
这不是机器运算精度的问题,而是每一层的输出规模。在实践中:
如果你不熟悉这些概念,这段视频应该会对你学习这些概念有所帮助。
LeNet 5 LeNet-5是第一个成功的卷积神经网络,共有7层,不包含输入,每层都包含可训练参数(连接权重)。 AlexNet tf AlexNet可以认为是增强版的LeNet5,共8层,其中前5层convolutional,后面3层是full-connected。 GooLeNet (Inception v2) GoogLeNet用了很多相同的层,共22层,并将全连接层变为稀疏链接层。 In
代码见nn_overfit.py 优化 Regularization 在前面实现的RELU连接的两层神经网络中,加Regularization进行约束,采用加l2 norm的方法,进行负反馈: 代码实现上,只需要对tf_sgd_relu_nn中train_loss做修改即可: 可以用tf.nn.l2_loss(t)对一个Tensor对象求l2 norm 需要对我们使用的各个W都做这样的计算(参考t
本章到目前为止介绍的循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。图6.11演示了一个有$L$个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。 具体来说,在时间步$t$里,设小批量输入$\boldsymbol{X}_t \in \mathbb{R}^{n \times d}$(样本数
我正在尝试运行一个CNN(卷积神经网络),具有1通道/灰度图像,大小为28x28像素。当我尝试训练模型时,它说: ValueError:图层sequential_5输入0与图层不兼容:: 预期min_ndim=4,发现ndim=3。完整形状收到:[无,28,28]
我正在研究CS231n卷积神经网络,用于视觉识别。在卷积神经网络中,神经元按3维排列(,,)。我对CNN的有问题。我无法想象这是什么。 在链接中,他们说。 我可以理解这样的想法:我们从图像上取下一小块区域,然后将它与“滤镜”进行比较。那么滤镜会收集小图像吗?他们还说那么感受野的维数和滤波器的维数是一样的吗?这里的深度是多少?我们使用CNN的深度意味着什么? 编辑:所以在教程的一部分(真实世界示例部
在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。一方面,神经网络计算复杂。虽然20世纪90年代也有过一些针对神经网络的加速硬件,但并没有像之后GPU那样大量普及。因此,训练一个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另一方面,当年研究者还没有大量深入研究参