我正在研究CS231n卷积神经网络用于视觉识别的卷积神经网络.在卷积神经网络,神经元被设置在3个维度(height,width,depth).我遇到depth了CNN的问题.我无法想象它是什么.
在链接中他们说The CONV layer's parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume.
我可以理解我们从图像中取出一小块区域,然后将其与"过滤器"进行比较.那么滤镜会收集小图片吗?他们还说,We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron.那么感受野与过滤器具有相同的尺寸吗?这里的深度又是什么?我们用CNN的深度表示什么?
所以,我的问题主要是,如果我拍摄的图像具有维度[32*32*3](假设我有50000个这样的图像,制作数据集[50000*32*32*3] …
machine-learning neural-network deep-learning conv-neural-network
情况:
当我的训练数据在2个标签之间的标签分布不平衡时,我想知道如何最佳地使用TensorFlow.例如,假设MNIST教程被简化为仅区分1和0,其中我们可用的所有图像都是1或0.当我们有大约50%的每种类型的图像进行训练和测试时,这很容易使用提供的TensorFlow教程进行训练.但是,我们的数据中有90%的图像是0,只有10%是1的情况呢?我观察到,在这种情况下,TensorFlow会定期将我的整个测试集预测为0,实现90%无意义的准确性.
我曾经取得过一些成功的策略是选择随机批次进行训练,这些训练的均匀分布为0和1.这种方法确保我仍然可以使用我的所有训练数据并产生不错的结果,准确率低于90%,但是更有用的分类器.由于在这种情况下准确性对我来说有些无用,我选择的度量通常是ROC曲线下面积(AUROC),这会产生相当高于.50的结果.
问题:
(1)我所描述的策略是否是对不平衡数据进行培训的可接受或最佳方式,还是有可能更好的方法?
(2)由于精度度量在不平衡数据的情况下不那么有用,是否有另一个度量可以通过改变成本函数来最大化?我当然可以计算AUROC训练后的训练,但我可以训练以最大化AUROC吗?
(3)我是否可以对我的成本函数进行其他改动以改善不平衡数据的结果?目前,我正在使用TensorFlow教程中给出的默认建议:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
Run Code Online (Sandbox Code Playgroud)
我听说这可能是通过加大小标签类的错误分类的成本来实现的,但我不确定如何做到这一点.
machine-learning perceptron neural-network deep-learning tensorflow
众所周知,现代最流行的CNN(卷积神经网络):VGG/ResNet(FasterRCNN),SSD,Yolo,Yolo v2,DenseBox,DetectNet - 不是旋转不变的:现代CNN(卷积神经网络)是否像DetectNet一样旋转不变?
还知道,有几个神经网络具有旋转不变对象检测:
Rotation-Invariant Neoperceptron 2006(PDF):https://www.researchgate.net/publication/224649475_Rotation-Invariant_Neoperceptron
学习用于纹理分类的旋转不变卷积滤波器2016(PDF):https://arxiv.org/abs/1604.06720
RIFD-CNN:用于物体检测的旋转不变和Fisher判别卷积神经网络2016(PDF):http://www.cv-foundation.org/openaccess/content_cvpr_2016/html/Cheng_RIFD-CNN_Rotation-Invariant_and_CVPR_2016_paper.html
卷积神经网络中的编码不变性2014(PDF)
用于星系形态预测的旋转不变卷积神经网络(PDF):https://arxiv.org/abs/1503.07077
学习旋转不变卷积神经网络用于VHR光学遥感图像中的物体检测2016:http://ieeexplore.ieee.org/document/7560644/
我们知道,在这样的图像检测竞赛中:IMAGE-NET,MSCOCO,PASCAL VOC - 使用的网络集合(同时是一些神经网络).或网络集成在单网中,如ResNet(残留网络表现得像相对浅网络的集合)
但是在像MSRA这样的获胜者中使用旋转不变的网络集合,如果没有,那么为什么呢?为什么在整体中额外的旋转不变网络不会增加精确度以检测某些物体,例如飞机物体 - 哪些图像是在不同的旋转角度下完成的?
有可能:
为什么旋转不变神经网络不会用于流行的对象检测竞赛的获胜者?
machine-learning computer-vision neural-network deep-learning conv-neural-network
在训练网络时,我一直看到一种非常奇怪的行为,经过几十次迭代(8到10小时)的学习,一切都中断,训练损失增加:
训练数据本身是随机的,并且分布在.tfrecord包含1000每个示例的许多文件中,然后在输入阶段再次洗牌并批量处理200示例.
我正在设计一个同时执行四个不同回归任务的网络,例如确定对象出现在图像中的可能性并同时确定其方向.网络以几个卷积层开始,一些具有剩余连接,然后分支到四个完全连接的段.
由于第一次回归导致概率,我使用交叉熵进行损失,而其他使用经典L2距离.然而,由于它们的性质,概率损失大约为0..1,而定向损失可能要大得多0..10.我已经将输入和输出值标准化并使用剪切
normalized = tf.clip_by_average_norm(inferred.sin_cos, clip_norm=2.)
Run Code Online (Sandbox Code Playgroud)
在事情变得非常糟糕的情况下.
我已经(成功地)使用Adam优化器来优化包含所有不同损失(而不是reduce_sum它们)的张量,如下所示:
reg_loss = tf.reduce_sum(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES))
loss = tf.pack([loss_probability, sin_cos_mse, magnitude_mse, pos_mse, reg_loss])
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate,
epsilon=self.params.adam_epsilon)
op_minimize = optimizer.minimize(loss, global_step=global_step)
Run Code Online (Sandbox Code Playgroud)
为了在TensorBoard中显示结果,我实际上是这样做的
loss_sum = tf.reduce_sum(loss)
Run Code Online (Sandbox Code Playgroud)
标量摘要.
Adam被设置为学习率1e-4和epsilon 1e-4(我看到与epislon的默认值相同的行为,当我保持学习率时,它会更快地打破1e-3).正规化对这一点也没有影响,它在某种程度上是这样做的.
我还应该补充说,停止训练并从最后一个检查点重新启动 - 这意味着训练输入文件也会再次洗牌 - 导致相同的行为.在那一点上,训练似乎总是表现得相似.
例如,我有1维向量的维度(5).我想将其重塑为2D矩阵(1,5).
这是我如何用numpy做的
>>> import numpy as np
>>> a = np.array([1,2,3,4,5])
>>> a.shape
(5,)
>>> a = np.reshape(a, (1,5))
>>> a.shape
(1, 5)
>>> a
array([[1, 2, 3, 4, 5]])
>>>
Run Code Online (Sandbox Code Playgroud)
但是我怎么能用Pytorch Tensor(和Variable)做到这一点.我不想切换回numpy并再次切换到Torch变量,因为它会丢失反向传播信息.
这就是我在Pytorch中所拥有的
>>> import torch
>>> from torch.autograd import Variable
>>> a = torch.Tensor([1,2,3,4,5])
>>> a
1
2
3
4
5
[torch.FloatTensor of size 5]
>>> a.size()
(5L,)
>>> a_var = variable(a)
>>> a_var = Variable(a)
>>> a_var.size()
(5L,)
.....do some calculation in forward function
>>> a_var.size()
(5L,) …Run Code Online (Sandbox Code Playgroud) 我不清楚Keras中损失函数和指标之间的区别.该文档对我没有帮助.
哪一种是使用Keras的推荐(或更具前瞻性的)方式?
每个的优点/缺点是什么?
我想有更多的区别,而不仅仅是保存pip install一步而tensorflow.python.keras不是写keras.
通过使用pyTorch有两种方式滤除
torch.nn.Dropout和torch.nn.functional.Dropout.
我很难看到使用它们之间的区别
- 何时使用什么?
- 这有什么不同吗?
当我换掉它时,我没有看到任何性能差异.
我最近在尝试实现 AlexNet 时在 Pytorch 中遇到了一种方法。我不明白它是如何工作的。请用一些例子解释它背后的想法。以及它在神经网络功能方面与 Maxpooling 或 Average poling 的区别
nn.AdaptiveAvgPool2d((6, 6))
我最近在研究 CNN,我想知道 softmax 公式中温度的函数是什么?为什么我们应该使用高温来查看概率分布中更软的范数?Softmax 公式
machine-learning deep-learning conv-neural-network softmax densenet
deep-learning ×10
python ×3
pytorch ×3
tensorflow ×3
keras ×2
densenet ×1
dropout ×1
math ×1
numpy ×1
perceptron ×1
pip ×1
softmax ×1
tensor ×1