我正在 Tensorflow 中训练一个模型,我想实现一个有效的在线数据增强,我希望它工作得足够快,这样它就不会成为训练的瓶颈(这样数据就会更快地馈送到 GPU比模型在 GPU 上的前后循环)。然而,我以前有过使用 Keras 的经验,它ImageDataGenerator
似乎工作得非常整洁。所以我的问题是:
我应该使用 Keras
ImageDataGenerator
吗,仅仅因为它的?它是否比我使用 OpenCV 可能实现的更快(考虑到 Keras 缺少一些我可能需要的功能,但我不确定我是否真的需要它们)?
或者,如果您不能肯定地回答,请分享您的数据增强优化经验。如果您曾经对类似的东西进行过基准测试(比较速度性能),也请分享。任何帮助表示赞赏。提前致谢。
PS:数据是从硬盘加载的。
machine-learning computer-vision deep-learning keras tensorflow
这一层是静态的,它是一个伪函数。在前向传播中,它不做任何事情(身份函数)。然而,在反向传播中,它将梯度乘以 -1。github 上有很多实现,但它们不适用于 TF 2.0。
这里有一份供参考。
import tensorflow as tf
from tensorflow.python.framework import ops
class FlipGradientBuilder(object):
def __init__(self):
self.num_calls = 0
def __call__(self, x, l=1.0):
grad_name = "FlipGradient%d" % self.num_calls
@ops.RegisterGradient(grad_name)
def _flip_gradients(op, grad):
return [tf.negative(grad) * l]
g = tf.get_default_graph()
with g.gradient_override_map({"Identity": grad_name}):
y = tf.identity(x)
self.num_calls += 1
return y
flip_gradient = FlipGradientBuilder()
Run Code Online (Sandbox Code Playgroud) 在 Keras 中,有一个用于 SGD 的 Adadelta 优化器,如下所示:
optimizer = optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)
Run Code Online (Sandbox Code Playgroud)
这是文档:https : //keras.io/optimizers/#adadelta 但正如我们所知,Adadelta 不使用任何学习率。那么lr有什么用呢?
我的模型是用这段代码编译的
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
Run Code Online (Sandbox Code Playgroud)
在训练过程中,我遇到了这个错误
tensorflow.python.framework.errors_impl.InvalidArgumentError:收到标签值 5,该值超出了 [0, 5) 的有效范围。
我的标签是1,2,3,4,5
哪个[1,5]
不是[0, 5)
。如何为该模型设置标签?
machine-learning keras tensorflow multiclass-classification tf.keras