小编Jse*_*mol的帖子

在python中读取PASCAL VOC批注

我在xml文件(例如此文件)中具有注释,该注释遵循PASCAL VOC约定:

<annotation>
<folder>training</folder>
<filename>chanel1.jpg</filename>
<source>
<database>synthetic initialization</database>
<annotation>PASCAL VOC2007</annotation>
<image>synthetic</image>
<flickrid>none</flickrid>
</source>
<owner>
<flickrid>none</flickrid>
<name>none</name>
</owner>
<size>
<width>640</width>
<height>427</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>chanel</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>344</xmin>
<ymin>10</ymin>
<xmax>422</xmax>
<ymax>83</ymax>
</bndbox>
</object>
<object>
<name>chanel</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>355</xmin>
<ymin>165</ymin>
<xmax>443</xmax>
<ymax>206</ymax>
</bndbox>
</object>
</annotation>
Run Code Online (Sandbox Code Playgroud)

检索字段filenamebndboxPython中最干净的方法是什么?

我尝试使用ElementTree,这似乎是官方的Python解决方案,但我无法使其正常工作。

到目前为止,我的代码:

from xml.etree import ElementTree as ET
tree = ET.parse("data/all/annotations/" + file)
fn = tree.find('filename').text
boxes = tree.findall('bndbox')
Run Code Online (Sandbox Code Playgroud)

这产生

fn == 'chanel1.jpg'
boxes == []
Run Code Online (Sandbox Code Playgroud)

因此,它成功提取了 …

python xml python-3.x

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

创建一组 numpy 数组

我想创建一组 numpy 数组,然后有效地执行in操作。

explored = {
       np.array([[4,9,6,1,2,5], [5,8,3,7,7,9], [2,4,1,6,3,8]]),
       np.array([[1,2,3,1,2,5], [1,2,3,7,7,9], [1,2,3,6,3,8]]),
           }

if array in explored: # where array is an np.array 
    print("the array is already in the set")
else:
    explored.append(array)
Run Code Online (Sandbox Code Playgroud)

但是解释器抱怨这np.array不是可散列的类型。我可以做什么?

python numpy set python-3.x

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

从熊猫数据框加载Keras中的批量图像

我有一个包含两列的pandas数据帧,一列有图像路径,另一列有字符串类标签.

我还编写了以下函数,这些函数从数据框加载图像,重新规范化它们并将类标签转换为单热矢量.

def prepare_data(df):
    data_X, data_y = df.values[:,0], df.values[:,1]

    # Load images
    data_X = np.array([np.array(imread(fname)) for fname in data_X])

    # Normalize input
    data_X = data_X / 255 - 0.5

    # Prepare labels
    data_y = np.array([label2int[label] for label in data_y])
    data_y = to_categorical(data_y)

    return data_X, data_y
Run Code Online (Sandbox Code Playgroud)

我想将此数据帧提供给Keras CNN,但整个数据集太大而无法立即加载到内存中.

本网站的其他答案告诉我,为此我应该使用Keras ImageDataGenerator,但说实话,我不明白如何从文档中做到这一点.

将延迟加载批次中的数据提供给模型的最简单方法是什么?

如果它是一个ImageDataGenerator,我如何创建一个ImageDataGenerator,它接受初始化Dataframe并通过我的函数传递批次来创建适当的numpy数组?我如何使用ImageDataGenerator拟合模型?

python pandas keras

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

数据类型无效

以下代码无效:

data A = Int | [Int] | (Int, Int)
Run Code Online (Sandbox Code Playgroud)

为什么可以将具体类型Int用作数据类型定义的一部分,而不是具体类型[Int](Int, Int)

haskell types algebraic-data-types

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

构建 Keras 项目以在 GPU 中实现可重现的结果

我正在编写一个 tensorflow.Keras 包装器来执行 ML 实验。

我需要我的框架能够执行配置 yaml 文件中指定的实验并在 GPU 中并行运行。

然后我需要保证,如果我再次运行该实验,即使不是完全相同的结果,我也会得到相当接近的结果。

为了确保这一点,我的训练脚本在开头包含这些行,遵循官方文档中的指导原则:

# Set up random seeds
random.seed(seed)
np.random.seed(seed)
tf.set_random_seed(seed)
Run Code Online (Sandbox Code Playgroud)

这已被证明是不够的。

我运行了 4 次相同的配置,并绘制了结果:

在此处输入图片说明

如您所见,运行之间的结果差异很大。

如何在 Keras 中设置训练课程以确保在 GPU 中训练时获得相当相似的结果?这甚至可能吗?

可以在此处找到完整的培训脚本。

我的一些同事只使用纯 TF,他们的结果似乎更加一致。更重要的是,他们似乎没有播种任何随机性,只是为了确保训练和验证拆分始终相同。

python gpu random-seed keras tensorflow

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

Python isub在lambda中

为什么left = lambda: cursor = cursor - 1同时工作left = lambda: cursor -= cursor会给我一个语法错误?

是否存在减少内部的问题lambda

编辑:一点背景.我想要一个有以下成员的班级:

self.instructions = {
            "0": lambda: self.tape[self.cursor] = 0   
            "1": lambda: self.tape[self.cursor] = 1
            "L": lambda: self.cursor -= 1
            "R": lambda: self.cursor += 1
            "HALT" = lambda: self.halted = True]
        }
Run Code Online (Sandbox Code Playgroud)

我该如何工作?

python syntax lambda python-3.x

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

使用填充堆叠不同长度的 Numpy 数组

a = np.array([1,2,3])
b = np.array([4,5])

l = [a,b]
Run Code Online (Sandbox Code Playgroud)

我想要一个stack_padding这样的功能:

assert(stack_padding(l) == np.array([[1,2,3],[4,5,0]])
Run Code Online (Sandbox Code Playgroud)

在 numpy 中是否有标准的实现方式

编辑:l可能有更多的元素

python numpy

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

Python 中迭代字典的复杂性

这是一个相当简单的问题,我一直无法找到答案。如果我有一本字典,迭代它的复杂性是多少?

换句话说,诸如 之类的字典遍历的时间复杂度是多少for key in my_dict: print(key)

我天真的理解是,由于 Python 中的字典是哈希图,因此我们需要迭代字典的所有可能的哈希值。

这看起来有点矫枉过正,但也许没问题,因为随着我们添加元素,字典会逐渐变大,所以我们通过始终拥有一个几乎满到恒定负载因子的字典来摊销成本?

python dictionary time-complexity

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