我正在参加Kaggle的竞赛,评估指标定义为
该竞争是根据不同交叉点上的平均精度(IoU)阈值来评估的.建议的一组对象像素和一组真实对象像素的IoU计算如下:
IoU(A,B)=(A?B)/(A?B)
Run Code Online (Sandbox Code Playgroud)
度量标准扫描一系列IoU阈值,在每个点计算平均精度值.阈值范围从0.5到0.95,步长为0.05 : (0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95). 换句话说,在阈值为0.5时,如果预测对象与地面实况对象结合的交点大于0.5,则认为该预测对象是"命中".在每个阈值t处,基于通过将预测对象与所有地面实况对象进行比较而得到的真阳性(TP),假阴性(FN)和误报的数量来计算精度值(FP):
TP(t)/TP(t)+FP(t)+FN(t).
Run Code Online (Sandbox Code Playgroud)
当单个预测对象与IoU高于阈值的地面实况对象匹配时,计算真正的正数.误报表示预测对象没有关联的地面实况对象.假阴性表示地面实况对象没有关联的预测对象.然后将单个图像的平均精度计算为每个IoU阈值处的上述精度值的平均值:
(1/|thresholds|)*?tTP(t)/TP(t)+FP(t)+FN(t)
Run Code Online (Sandbox Code Playgroud)
现在,我已经在纯粹的numpy中编写了这个函数,因为它更容易编码,我已经装饰它tf.py_fucn()以便与Keras一起使用.以下是示例代码:
def iou_metric(y_true_in, y_pred_in, fix_zero=False):
labels = y_true_in
y_pred = y_pred_in
true_objects = 2
pred_objects = 2
if fix_zero:
if np.sum(y_true_in) == 0:
return 1 if np.sum(y_pred_in) == 0 else 0
intersection = np.histogram2d(labels.flatten(), y_pred.flatten(), bins=(true_objects, pred_objects))[0]
# Compute areas (needed for finding the union between all objects)
area_true = np.histogram(labels, bins …Run Code Online (Sandbox Code Playgroud) 我有一个元组列表,其元素是这样的:
aa = [('a', 'b'), ('c', 'd'), ('b', 'a')]
Run Code Online (Sandbox Code Playgroud)
我想('a', 'b') and ('b', 'a')作为同一组处理,并希望只提取唯一的元组.所以输出应该是这样的:
[('a', 'b'), ('c', 'd')]
Run Code Online (Sandbox Code Playgroud)
我如何有效地实现这一点,因为我的列表包含数百万个这样的元组?
我有一个元组列表,每个元组包含一个字符串和两个整数。该列表如下所示:
x = [('a',1,2), ('b',3,4), ('x',5,6), ('a',2,1)]
Run Code Online (Sandbox Code Playgroud)
该列表包含数千个这样的元组。现在,如果我想获得独特的组合,我可以frozenset按如下方式在我的列表中进行:
y = set(map(frozenset, x))
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
{frozenset({'a', 2, 1}), frozenset({'x', 5, 6}), frozenset({3, 'b', 4})}
Run Code Online (Sandbox Code Playgroud)
我知道 set 是一个无序的数据结构,这是正常情况,但我想在此处保留元素的顺序,以便此后可以将元素插入到pandas数据帧中。数据框将如下所示:
Name Marks1 Marks2
0 a 1 2
1 b 3 4
2 x 5 6
Run Code Online (Sandbox Code Playgroud) 我有一个pandas数据框,我有一个values像这样的列:
0 16 0
1 7 1 2 0
2 5
3 1
4 18
Run Code Online (Sandbox Code Playgroud)
我想要的是创建另一个列,modified_values其中包含分割每个值后我将获得的所有不同数字的列表.新专栏将是这样的:
0 [16, 0]
1 [7, 1, 2, 0]
2 [5]
3 [1]
4 [18]
Run Code Online (Sandbox Code Playgroud)
请注意此列表中的值应该是int和不是strings.
我所知道的事情:
1)我可以像这样以矢量化的方式拆分列
df.values.str.split(" ").这将给我列表,但列表中的对象将是字符串.我可以在此基础上添加另一个操作,df.values.str.split(" ").apply(func to convert values to int)但这不会被矢量化
2)我可以直接这样做 df['modified_values']= df['values'].apply(func that splits as well as converts to int)
第二个肯定比第一个慢得多,但我想知道是否可以以矢量化的方式实现同样的事情.
我有一个看起来像这样的熊猫数据框:
A B
1 USA Y
3 USA Y
4 USA N
5 India Y
8 India N
12 USA N
14 USA Y
19 USA Y
Run Code Online (Sandbox Code Playgroud)
我想countplot为这个数据框做一个。也就是说,该图将显示国家/地区名称,X-axis并在 上显示每个类别的计数Y-axis。我知道我可以这样做seaborn:
sns.countplot(x='A', data=df, hue='B')
但这不会是一个交互式情节。我想实现同样的目标,plotly但我很难弄清楚。任何人都可以帮我吗?
我正在张量流中训练模型,并且正在为模型做检查点。在Checkpoints目录中,我有四个文件,
checkpointmodel.cpkt-0.data-00000-of-00001model.cpkt-0.indexmodel.cpkt-0.meta现在,我要提取图形中每一层的权重值,该怎么做?
我尝试了这个:
import tensorflow as tf
sess = tf.InteractiveSession()
saver = tf.train.import_meta_graph('model.cpkt-0.meta')
w = saver.restore(sess, 'model.cpkt-0.data-00000-of-00001')
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
Unable to open table file ./model.cpkt-0.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
Run Code Online (Sandbox Code Playgroud) machine-learning neural-network deep-learning conv-neural-network tensorflow
我已经使用numpy了一段时间了,但偶然发现了我不完全了解的一件事:
a = np.ones(20)
b = np.zeros(10)
print(id(a)==id(b)) # prints False
print(id(a), id(b)) # prints (4591424976, 4590843504)
print(id(a[0])==id(b[0])) # prints True
print(id(a[0]), id(b[0])) # prints (4588947064, 4588947064)
print(id(a[0])) # 4588947184
print(id(b[0])) # 4588947280
Run Code Online (Sandbox Code Playgroud)
有人可以解释最近四个打印语句中观察到的行为吗?另外,我知道id给您分配实际上在内存中分配的唯一对象ID 的事实,但是每次我运行最后两个print语句时,我都会得到不同的id值。这是预期的行为吗?
我一直在使用见过的人IOU作为度量detection任务,Dice Coeff为segmentation任务。除了骰子赋予相交部分两倍的权重之外,这两个指标在等式方面看起来非常相似。如果我是对的,那么
Dice: (2 x (A*B) / (A + B))
IOU : (A * B) / (A + B)
Run Code Online (Sandbox Code Playgroud)
更喜欢用骰子进行分割和使用 IOU 进行检测有什么特别的原因吗?
python ×6
pandas ×3
python-3.x ×3
numpy ×2
python-2.7 ×2
tensorflow ×2
frozenset ×1
keras ×1
metrics ×1
plotly ×1
set ×1
unique ×1