【发布时间】:2019-11-17 11:15:31
【问题描述】:
假设我的数据由气泡图像组成,标签是描述大小分布的直方图,例如:
0-10mm 10%
10-20mm 30%
20-30mm 40%
30-40mm 20%
重要的是要注意 -
- 所有尺寸百分比的总和为 100%(或更准确地说是 1.0)。
- 我没有带注释的数据,因此我无法训练对象检测器,然后仅通过计算检测到的对象来计算分布。但是,我的数据确实有一个特征提取器训练。
我实现了一个简单的 CNN,它由 -
- Resnet50 骨干网。
- 全局最大池化。
- 6 个过滤器的 1x1 卷积(标签中的 6 个分布箱)。
经过一些实验,我得出的结论是,softmax 和交叉熵作为损失函数不适合我的问题和需求。
我认为余弦相似度损失可能是一个不错的选择(归一化将是后期处理的一部分)。这是实现:
def cosine_similarity_loss(logits, probs, weights=1.0, label_smoothing=0):
x1_val = tf.sqrt(tf.reduce_sum(tf.matmul(logits, tf.transpose(logits)), axis=1))
x2_val = tf.sqrt(tf.reduce_sum(tf.matmul(probs, tf.transpose(probs)), axis=1))
denom = tf.multiply(x1_val, x2_val)
num = tf.reduce_sum(tf.multiply(logits, probs), axis=1)
cosine_sim = tf.math.divide(num, denom)
cosine_dist = tf.math.reduce_mean(1 - tf.square(cosine_sim)) # Cosine Distance. Reduce mean for shape compatibility.
return cosine_dist
损失是余弦距离和权重 l2 正则化的总和。在第一次前馈后我得到了loss: 3.1267,在第二次前馈后我得到了loss: 96003645440.0000——这意味着权重爆炸了(logits: [[-785595.812 -553858.625 -545579.625 -148547.875 -12845.8633 19871.1055]] 而probs: [[0.466 0.297 0.19 0.047 0 0]])。
如此快速和极端的增长可能是什么原因?
【问题讨论】:
标签: tensorflow deep-learning computer-vision