小编Mas*_*oda的帖子

使用 Tensorflow 在联合损失上实现交集

这可能更像是一个 Tensorflow 梯度问题。我一直在尝试将 Intersection over Union (IoU) 作为损失来实现,并且遇到了一些问题。就这一点而言,这是我计算 IoU 的代码片段:

def get_iou(masks, predictions):
    ious = []
    for i in range(batch_size):
        mask = masks[i]
        pred = predictions[i]
        masks_sum = tf.reduce_sum(mask)
        predictions_sum = tf.reduce_mean(pred)
        intersection = tf.reduce_sum(tf.multiply(mask, pred))
        union = masks_sum + predictions_sum - intersection
        iou = intersection / union
        ious.append(iou)
    return ious

iou = get_iou(masks, predictions)
mean_iou_loss = -tf.log(tf.reduce_sum(iou))
train_op = tf.train.AdamOptimizer(0.001).minimize(mean_iou_loss)
Run Code Online (Sandbox Code Playgroud)

它按预期工作。但是,我遇到的问题是损失并没有减少。该模型确实进行了训练,但结果并不理想,所以我想知道我是否正确实施了它。我必须自己计算梯度吗?我可以计算出梯度由衍生该借条丢失本文使用tf.gradients(),虽然我不知道如何将随tf.train.AdamOptimizer()。阅读文档,我觉得compute_gradients和apply_gradients是我需要使用的命令,但我找不到有关如何使用它们的任何示例。我的理解是,Tensorflow 图应该能够通过链式法则得出梯度本身。那么在这个问题中甚至需要自定义渐变吗?如果自定义梯度不是必需的,那么我可能只是有一个不适定的问题,需要调整一些超参数。

注意:我已经尝试过 Tensorflow 的 IoU 实现tf.metrics.mean_iou() …

python bounding-box object-detection conv-neural-network tensorflow

5
推荐指数
1
解决办法
4277
查看次数

如何在快速傅立叶变换中正确缩放频率轴?

我正在尝试使用简单正弦函数的FFT的一些示例代码。下面是代码

import numpy as np
from matplotlib import pyplot as plt

N = 1024
limit = 10
x = np.linspace(-limit, limit, N)
dx = x[1] - x[0]
y = np.sin(2 * np.pi * 5 * x) + np.sin(2 * np.pi * x)
Y = np.abs(np.fft.fft(y) ** 2)
z = fft.fftshift(np.fft.fftfreq(N, dx))
plt.plot(z[int(N/2):], Y[int(N/2):])
plt.show()
Run Code Online (Sandbox Code Playgroud)

根据给出的功能, 式,很明显应该在频率1和5处有两个尖峰。但是,当我运行此代码时,得到以下图。

                                         在此处输入图片说明

显然,峰值不在应有的位置。另外,我注意到频率缩放对点数N以及我设定的间隔限制很敏感limit。例如,设置N = 2048给出以下图表。

                                         在此处输入图片说明

如您所见,尖峰的位置已更改。现在,保留N = 1024和设置limit = 100也会更改结果。

                                         在此处输入图片说明

如何使频率轴始终正确缩放?

python numpy fft frequency

3
推荐指数
1
解决办法
223
查看次数