小编use*_*771的帖子

在Tensorflow中,当使用dataset.shuffle(1000)时,我是否仅使用来自整个数据集的1000个数据?

使用以下代码训练我的网络时:

classifier = tf.estimator.Estimator(
    model_fn=my_neural_network_model, 
    model_dir=some_path_to_save_checkpoints,
    params={
        some_parameters
    }
)
classifier.train(input_fn=data_train_estimator, steps=step_num)
Run Code Online (Sandbox Code Playgroud)

其中data_train_estimator定义为:

def data_train_estimator():
    dataset = tf.data.TextLineDataset(train_csv_file).map(_parse_csv_train)  
    dataset = dataset.batch(100)
    dataset = dataset.shuffle(1000)
    dataset = dataset.repeat()
    iterator = dataset.make_one_shot_iterator() 
    feature, label = iterator.get_next()
    return feature, label
Run Code Online (Sandbox Code Playgroud)

dataset.shuffle(1000)实际上如何工作?

进一步来说,

假设我有20000张图像,批量大小= 100,随机缓冲区大小= 1000,我训练模型5000步.

1.对于每1000个步骤,我使用10个批次(大小为100),每个批次独立地从洗牌缓冲区中的相同1000个图像中取出?

2.1 shuffle缓冲区是否像移动窗口一样工作?

2.2或者,它是否从5000张图片中随机挑选1000张(有或没有替换)?

3.在整个5000步中,有多少个不同的状态都有shuffle缓冲区?

python tensorflow

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

Tensorflow - 有没有办法实现张量图像剪切/旋转/平移?

我正在尝试进行不同类型的(图像)数据增强来训练我的神经网络。

我知道 tf.image 提供了一些增强功能,但是它们太简单了——例如,我只能将图像旋转 90 度,而不是任意度数。

我也知道 tf.keras.preprocessing.image 提供随机旋转、随机剪切、随机移位和随机缩放。然而,这些方法只能应用于 numpy 数组,而不是张量。

我知道我可以先读取图像,使用 tf.keras.preprocessing.image 中的函数进行增强,然后将这些增强的 numpy 数组转换为张量。

但是,我只是想知道是否有一种方法可以实现张量增强,这样我就不需要为“图像文件 -> 张量 -> numpy 数组 -> 张量”过程而烦恼。


为那些想知道如何应用您的转换的人更新:

有关详细的源代码,您可能需要查看tf.contrib.image.transformtf.contrib.image.matrices_to_flat_transforms

这是我的代码:

def transformImg(imgIn,forward_transform):
    t = tf.contrib.image.matrices_to_flat_transforms(tf.linalg.inv(forward_transform))
    # please notice that forward_transform must be a float matrix,
    # e.g. [[2.0,0,0],[0,1.0,0],[0,0,1]] will work
    # but [[2,0,0],[0,1,0],[0,0,1]] will not
    imgOut = tf.contrib.image.transform(imgIn, t, interpolation="BILINEAR",name=None)
    return imgOut
Run Code Online (Sandbox Code Playgroud)

基本上,上面的代码正在做

在此处输入图片说明对于 中的每个点 (x,y) imgIn

剪切变换平行于x轴,例如,是

在此处输入图片说明

因此,我们可以像这样实现剪切变换(使用transformImg()上面定义的):

def shear_transform_example(filename,shear_lambda):
    image_string = tf.read_file(filename) …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow

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

如何混合不平衡的数据集以达到每个标签所需的分布?

我在 ubuntu 16.04 上运行我的神经网络,有 1 个 GPU (GTX 1070) 和 4 个 CPU。

我的数据集包含大约 35,000 张图像,但数据集并不平衡:0 类占 90%,1、2、3、4 类共享其他 10%。因此,我通过使用dataset.repeat(class_weight)[我也使用一个函数来应用随机增强] 对1-4 类进行过采样,然后使用concatenate它们。

重采样策略为:

1) 一开始,class_weight[n]将设置为一个较大的数字,以便每个类将具有与类 0 相同的图像数量。

2) 随着训练的进行,epoch 数增加,权重会根据 epoch 数下降,从而使分布变得更接近实际分布。

因为我class_weight会随着时代的变化而变化,所以我不能在一开始就打乱整个数据集。相反,我必须逐个类接收数据,并在连接每个类的过采样数据后对整个数据集进行混洗。而且,为了实现平衡的批次,我必须按元素对整个数据集进行洗牌。

以下是我的代码的一部分。

def my_estimator_func():
    d0 = tf.data.TextLineDataset(train_csv_0).map(_parse_csv_train)
    d1 = tf.data.TextLineDataset(train_csv_1).map(_parse_csv_train)
    d2 = tf.data.TextLineDataset(train_csv_2).map(_parse_csv_train)
    d3 = tf.data.TextLineDataset(train_csv_3).map(_parse_csv_train)
    d4 = tf.data.TextLineDataset(train_csv_4).map(_parse_csv_train)
    d1 = d1.repeat(class_weight[1])
    d2 = d2.repeat(class_weight[2])
    d3 = d3.repeat(class_weight[3])
    d4 = d4.repeat(class_weight[4])
    dataset = d0.concatenate(d1).concatenate(d2).concatenate(d3).concatenate(d4)    
    dataset = dataset.shuffle(180000) # <- This …
Run Code Online (Sandbox Code Playgroud)

python tensorflow tensorflow-datasets

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

为什么tf.image.decode_jpeg可以解码png?

今天我正在测试一些tensorflow(python)代码。这是著名的MNIST装置上的神经网络。

一切工作正常,因此我只是通读了代码并研究了该网络的结构。

当涉及到图像输入时,我发现以下代码:

image_string = tf.read_file(filename)

image_decoded = tf.image.decode_jpeg(image_string, channels=3)
Run Code Online (Sandbox Code Playgroud)

该代码使用的是“ decode_jpeg”而不是“ decode_png”。而且我没有看到任何错误。

但是,我100%确定图片为PNG格式。

我用过

od -c -b 1.png
Run Code Online (Sandbox Code Playgroud)

查看这些图像,它们就是PNG。

那么,为什么“ decode_jpeg”可以在PNG上工作?并且是否有由此引起的潜在问题?

python image tensorflow

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

Android Studio 3.3中的“包含C ++支持”选项在哪里?

我是android开发的新手,并且正在按照一些教程进行练习。

我注意到在一些教程中,当他们创建一个新项目时,总是有一个“ Include C ++ support”选项。就像这张图片:

在此处输入图片说明

但是,当涉及到Android Studio 3.3(这是最新版本,我昨天才安装了它)时,我只是找不到它。Android studio 3.3如下所示: 在此处输入图片说明

我曾尝试用Google搜索类似“ android studio 3.3包括C ++支持”之类的内容,但未能获得答案。

那么,那个选项在哪里呢?他们放弃了吗?

顺便说一下,我正在Linux(Ubuntu16.04)上进行开发,而我发现的大多数教程都在Windows上。这可能是原因吗?

android android-studio android-studio-3.3

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