小编mlR*_*cks的帖子

在Keras/TensorFlow中使用纯numpy度量作为度量

我正在参加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)

python machine-learning deep-learning keras tensorflow

8
推荐指数
1
解决办法
331
查看次数

从列表中获取唯一元组

我有一个元组列表,其元素是这样的:

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)

我如何有效地实现这一点,因为我的列表包含数百万个这样的元组?

python unique set python-2.7

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

保持冻结集中元素的顺序

我有一个元组列表,每个元组包含一个字符串和两个整数。该列表如下所示:

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)

python python-2.7 pandas frozenset

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

将字符串拆分为列表并将项目转换为int

我有一个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)

第二个肯定比第一个慢得多,但我想知道是否可以以矢量化的方式实现同​​样的事情.

python numpy python-3.x pandas

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

以 plotly 绘制分组的熊猫数据

我有一个看起来像这样的熊猫数据框:

    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但我很难弄清楚。任何人都可以帮我吗?

python data-visualization python-3.x pandas plotly

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

从张量流模型检查点提取权重值

我正在张量流中训练模型,并且正在为模型做检查点。在Checkpoints目录中,我有四个文件,

  • checkpoint
  • model.cpkt-0.data-00000-of-00001
  • model.cpkt-0.index
  • model.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

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

比较两个Numpy数组的对象ID

我已经使用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值。这是预期的行为吗?

python numpy python-3.x numpy-ndarray

2
推荐指数
1
解决办法
123
查看次数

为什么分割任务使用 Dice Coefficient 而不是 IOU?

我一直在使用见过的人IOU作为度量detection任务,Dice Coeffsegmentation任务。除了骰子赋予相交部分两倍的权重之外,这两个指标在等式方面看起来非常相似。如果我是对的,那么

Dice: (2 x (A*B) / (A + B))
IOU : (A * B) / (A + B) 
Run Code Online (Sandbox Code Playgroud)

更喜欢用骰子进行分割和使用 IOU 进行检测有什么特别的原因吗?

metrics machine-learning computer-vision deep-learning

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