标签: training-data

我应该保留/删除代表不同对象的相同训练样例吗?

我准备了一个数据集来识别某种类型的对象(大约2240个负面对象示例,只有大约90个正面对象示例).但是,在为数据集中的每个对象计算10个要素之后,唯一训练实例的数量分别下降到大约130和30.

由于相同的训练实例实际上代表不同的对象,我可以说这种复制包含相关信息(例如对象特征值的分布),这可能在某种程度上有用吗?

statistics classification machine-learning training-data

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

Tensorflow卷积神经网络 - 使用小数据集进行训练,对图像应用随机变化

假设我有一个非常小的数据集,只有50个图像.我想重新使用Red Pill教程中的代码,但是在每批训练中将随机变换应用于同一组图像,比如对亮度,对比度等进行随机更改.我只添加了一个函数:

def preprocessImages(x):
    retValue = numpy.empty_like(x)
    for i in range(50):
        image = x[i]
        image = tf.reshape(image, [28,28,1])
        image = tf.image.random_brightness(image, max_delta=63)
        #image = tf.image.random_contrast(image, lower=0.2, upper=1.8)
        # Subtract off the mean and divide by the variance of the pixels.
        float_image = tf.image.per_image_whitening(image)
        float_image_Mat = sess.run(float_image)
        retValue[i] = float_image_Mat.reshape((28*28))
    return retValue
Run Code Online (Sandbox Code Playgroud)

对旧代码的小改动:

batch = mnist.train.next_batch(50)
for i in range(1000):
  #batch = mnist.train.next_batch(50)
  if i%100 == 0:
    train_accuracy = accuracy.eval(feed_dict={
        x:preprocessImages(batch[0]), y_: batch[1], keep_prob: 1.0})
    print("step %d, training accuracy …
Run Code Online (Sandbox Code Playgroud)

training-data conv-neural-network tensorflow

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

为什么不在训练数据集上优化超参数?

在开发神经网络时,通常将训练数据划分为训练数据集、测试数据集和保留数据集(许多人分别将这些数据集称为训练数据集、验证数据集和测试数据集。相同的东西,不同的名称)。许多人建议根据测试数据集中的性能选择超参数。我的问题是:为什么?为什么不最大化训练数据集中超参数的性能,并在我们通过测试数据集中的性能下降检测到过度拟合时停止训练超参数?由于训练通常大于测试,与测试数据集上的训练超参数相比,这不会产生更好的结果吗?

2016 年 7 月 6 日更新

术语发生变化,以匹配下面的评论。在本文中,数据集现在被称为“训练”“验证”“测试” 。我不使用测试数据集进行训练。我正在使用 GA 来优化超参数。在外部 GA 训练过程的每次迭代中,GA 都会选择一个新的超参数集,在训练数据集上进行训练,并在验证和测试数据集上进行评估。GA 调整超参数以最大限度地提高训练数据集中的准确性。当检测到网络过拟合(在验证数据集中)时,迭代内的网络训练将停止,而当检测到超参数过拟合时(再次在验证中),外部 GA 训练过程将停止。结果是针对训练数据集进行了伪优化的超参数。问题是:为什么许多来源(例如https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf,第 B.1 节)建议优化验证集上的超参数,而不是训练集上的超参数?引用 Srivasta、Hinton 等人(上面的链接):“在验证集上调整超参数,以便产生最佳验证错误......

machine-learning training-data neural-network

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

如何在 TensorFlow 中动态生成训练数据?

我想在 TensorFlow 中创建移动 MNIST 训练集。我一直在考虑在或 using 中创建tf.ReaderBase和发出tf.Example训练序列的子类,但我不确定这是否是处理它的正确方法,以及它首先是否是一个好主意(关于创建的 CPU 负载)训练期间的序列)。tf.ReaderBase.readtf.QueueBase

on-the-fly training-data tensorflow

5
推荐指数
0
解决办法
454
查看次数

keras 损失在新纪元开始时随机跳到零

我正在训练一个具有多重损失的网络,并且使用生成器创建数据并将数据馈送到我的网络中。

我已经检查了数据的结构,它总体上看起来不错,并且在大多数情况下也几乎按照预期进行了训练,但是在几乎每次随机时期,每个预测的训练损失突然从

# End of epoch 3
loss: 2.8845 
Run Code Online (Sandbox Code Playgroud)

# Beginning of epoch 4
loss: 1.1921e-07
Run Code Online (Sandbox Code Playgroud)

我认为这可能是数据,但是,据我所知,数据通常很好,而且更加可疑,因为这将发生在随机时期(可能是因为在 SGD 期间选择了随机数据点?)但会持续存在在剩下的训练中。就像在 epoch 3 时,训练损失减少到1.1921e-07那么它将在 epoch 4、epoch 5 等中继续这样。

但是,有时它到达 epoch 5 并且还没有这样做,然后可能会在 epoch 6 或 7 进行。

在数据之外是否有任何可行的原因可能导致这种情况?一些模糊的数据点会导致如此快吗?

谢谢

编辑:

结果:

300/300 [==============================] - 339s - loss: 3.2912 - loss_1: 1.8683 - loss_2: 9.1352 - loss_3: 5.9845 - 
val_loss: 1.1921e-07 - val_loss_1: 1.1921e-07 - val_loss_2: 1.1921e-07 - val_loss_3: 1.1921e-07
Run Code Online (Sandbox Code Playgroud)

此后的下一个时期都有训练损失 1.1921e-07

training-data neural-network gradient-descent keras

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

你能用图像而不是文字和字体训练tesseract吗?

在tesseract 文档中,解释了使用示例文本和字体进行训练的方法.
我使用了jTessBoxEditor,但其工作方式与tesseract培训工具非常相似.
我得到了一些可接受的结果,但我认为最佳解决方案是训练tesseract,无论如何都必须识别实际类型的图像.
由于我只需要识别数字,我可以手工切割每个数字,也许每个数字的许多版本,并用这些图像训练tesseract,甚至手动设置框.
有没有办法做到这一点?

ocr tesseract training-data

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

训练、验证、测试批量大小比率

我正在 Tensorflow 上使用 Inception 进行迁移学习,这是我遵循的训练代码:https ://raw.githubusercontent.com/tensorflow/hub/master/examples/image_retraining/retrain.py

在代码的底部,我们可以根据我们的数据集指定参数。(有训练、val、测试百分比训练、val、测试批量大小
假设我有一个非常大的数据集(1 百万),并且我已经将 设置training, validation, testing percentage75:15:10

但我不知道如何正确设置批处理参数:

  • train_batch_size
  • 验证批量大小
  • test_batch_size

现在,我将 设置train_batch_size为 64,是否需要为 设置相同的值validation_batch_size?或者它应该比 更大或更小train_batch_size

python training-data conv-neural-network tensorflow

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

在open cv2 python中使用Tensor flow 2.0对象的方法是什么,为什么这么迂回?

我使用张量流 api (2.0) 加载图像,如下所示:

def load(image_file):
  image = tf.io.read_file(image_file)
  image = tf.image.decode_jpeg(image)
Run Code Online (Sandbox Code Playgroud)

现在我有了这个对象,我想显示这个图像,我可以简单地使用 matplotlib.pyplot,这很有效。

plt.figure()
plt.imshow(re/255.0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

然而,从一开始就用 OpenCV2 尝试这个是有问题的,大多数示例来自 1.0,基于 .eval() 会话的 numpy 转换建议。一种方法是首先将张量流对象转换为 numpy,这是 API 文档中执行此操作的函数:

TensorFlow
API r2.0
TensorFlow Core 2.0a
Python
tf.make_ndarray
Create a numpy ndarray from a tensor.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不起作用,我得到了许多错误,而我只想做一些简单的事情,然后使用一些开放的 cv2 函数,如重新映射、调整大小等:

文件“C:\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py”,第 426 行,调用中 self._initialize(args, kwds, add_initializers_to=initializer_map) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py”,第 370 行,在 _initialize *args, **kwds 中) ) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py”,第 1313 行,在 _get_concrete_function_internal_garbage_collected graph_function, _, _ = self._maybe_define_function(args, kwargs) 文件“C: \Python\Python37\lib\site-packages\tensorflow\python\eager\function.py”,第 1580 行,在 _maybe_define_function graph_function = self._create_graph_function(args, kwargs) …

python training-data python-3.x eager-execution tensorflow2.0

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

Grover 模型的多 GPU 训练

我正在尝试使用 tensorflow==1.13.1 在多个 GPU 上训练Grover 的鉴别器模型。该模型的默认配置假设在多个 TPU 上进行训练,并被证明适用于具有多个 TPU 的系统。然而,由于 TPU 不可用,我试图通过使用 tensorflow 分布策略更改模型的运行配置来将训练分布在多个 GPU 上,如下所示:

dist_strategy = tf.contrib.distribute.MirroredStrategy(
        num_gpus=8,
        cross_device_ops=AllReduceCrossDeviceOps('nccl', num_packs=8),
        # cross_device_ops=AllReduceCrossDeviceOps('hierarchical_copy')
)
Run Code Online (Sandbox Code Playgroud)

然后我尝试更改 GPU 的运行配置,如下所示:

 run_config = RunConfig(
        train_distribute=dist_strategy,
        eval_distribute=dist_strategy,
        log_step_count_steps=log_every_n_steps,
        model_dir=FLAGS.output_dir,
        save_checkpoints_steps=FLAGS.iterations_per_loop)
Run Code Online (Sandbox Code Playgroud)

它似乎正确分配数据(我可以通过 GPU 使用情况和其他指标来判断),但是在收集梯度时它失败并出现以下错误:

ValueError: You must specify an aggregation method to update a MirroredVariable in Replica Context.
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,我在分发策略中提供了跨设备操作。对我来说,最终的解决方案似乎是使用分布策略代码修改损失函数,但我认为它应该可以与 TPU 一起使用。任何帮助表示高度赞赏!

python gpu training-data tensorflow

5
推荐指数
0
解决办法
544
查看次数

在 keras fit_generator() 中未调用 on_epoch_end()

我按照本教程使用fit_generator()Keras 方法即时生成数据,以训练我的神经网络模型。

我使用keras.utils.Sequence类创建了一个生成器。调用fit_generator()是:

history = model.fit_generator(generator=EVDSSequence(images_train, TRAIN_BATCH_SIZE, INPUT_IMG_DIR, INPUT_JSON_DIR, SPLIT_CHAR, sizeArray, NCHW, shuffle=True),
                              steps_per_epoch=None, epochs=EPOCHS,
                              validation_data=EVDSSequence(images_valid, VALID_BATCH_SIZE, INPUT_IMG_DIR, INPUT_JSON_DIR, SPLIT_CHAR, sizeArray, NCHW, shuffle=True),
                              validation_steps=None,
                              callbacks=callbacksList, verbose=1,
                              workers=0, max_queue_size=1, use_multiprocessing=False)
Run Code Online (Sandbox Code Playgroud)

steps_per_epochNone,因此每个 epoch 的步数由 Keras__len()__方法计算。

正如上面的链接所说:

在这里,该方法on_epoch_end在每个 epoch 的开始和结束时触发一次。如果shuffle参数设置为True,我们将在每次通过时获得一个新的探索顺序(否则只保留线性探索方案)。

我的问题是该on_epoch_end()方法仅在最开始时被调用,而不会在每个时代结束时被调用。因此,在每个时期,批次顺序始终相同。

我尝试使用np.ceil而不是np.floorin__len__()方法,但没有成功。

你知道为什么on_epoch_end不在每个纪元结束时调用吗?您能告诉我在每个时代结束时(或开始时)调整批次顺序的任何解决方法吗?

非常感谢!

python training-data deep-learning keras tensorflow

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