Python 在Tensorflow中应用数据增强时,使用fit_generator()拟合模型时出错

Python 在Tensorflow中应用数据增强时,使用fit_generator()拟合模型时出错,python,python-3.x,tensorflow,keras,deep-learning,Python,Python 3.x,Tensorflow,Keras,Deep Learning,我正在win10上使用tensorflow 2.1.0。cuda和cudnn的版本为: # Name Version Build Channel cudnn 7.6.5 cuda10.0_0 我想用tf.keras.preprocessing.image.ImageDataGenerator()实现数据扩充,特别是fit_generator()方法。

我正在win10上使用tensorflow 2.1.0。cuda和cudnn的版本为:

# Name                    Version                   Build  Channel
cudnn                     7.6.5                cuda10.0_0
我想用tf.keras.preprocessing.image.ImageDataGenerator()实现数据扩充,特别是fit_generator()方法。但它返回了错误:

2020-04-15 15:06:28.571927: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-04-15 15:06:29.806016: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-04-15 15:06:29.806503: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
Traceback (most recent call last):
  File "E:/Studium/Machine Learning/check2.py", line 112, in <module>
    workers=4)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 1297, in fit_generator
    steps_name='steps_per_epoch')
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_generator.py", line 265, in model_iteration
    batch_outs = batch_function(*batch_data)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 973, in train_on_batch
    class_weight=class_weight, reset_metrics=reset_metrics)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py", line 264, in train_on_batch
    output_loss_metrics=model._output_loss_metrics)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_eager.py", line 311, in train_on_batch
    output_loss_metrics=output_loss_metrics))
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_eager.py", line 252, in _process_single_batch
    training=training))
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_eager.py", line 127, in _model_loss
    outs = model(inputs, **kwargs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 891, in __call__
    outputs = self.call(cast_inputs, *args, **kwargs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\sequential.py", line 256, in call
    return super(Sequential, self).call(inputs, training=training, mask=mask)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 708, in call
    convert_kwargs_to_constants=base_layer_utils.call_context().saving)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 860, in _run_internal_graph
    output_tensors = layer(computed_tensors, **kwargs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 891, in __call__
    outputs = self.call(cast_inputs, *args, **kwargs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\layers\convolutional.py", line 197, in call
    outputs = self._convolution_op(inputs, self.kernel)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\ops\nn_ops.py", line 1134, in __call__
    return self.conv_op(inp, filter)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\ops\nn_ops.py", line 639, in __call__
    return self.call(inp, filter)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\ops\nn_ops.py", line 238, in __call__
    name=self.name)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\ops\nn_ops.py", line 2010, in conv2d
    name=name)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\ops\gen_nn_ops.py", line 1031, in conv2d
    data_format=data_format, dilations=dilations, name=name, ctx=_ctx)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\ops\gen_nn_ops.py", line 1130, in conv2d_eager_fallback
    ctx=_ctx, name=name)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\eager\execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [Op:Conv2D]
2020-04-15 15:06:28.571927:I tensorflow/stream_executor/platform/default/dso_loader.cc:44]已成功打开动态库cudnn64_7.dll
2020-04-15 15:06:29.806016:E tensorflow/stream_executor/cuda/cuda_dnn.cc:329]无法创建cudnn句柄:cudnn_状态_ALLOC_失败
2020-04-15 15:06:29.806503:E tensorflow/stream_executor/cuda/cuda_dnn.cc:329]无法创建cudnn句柄:cudnn_STATUS_ALLOC_失败
回溯(最近一次呼叫最后一次):
文件“E:/Studium/Machine Learning/check2.py”,第112行,在
工人(4人)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\training.py”,第1297行,在fit\u生成器中
步骤(名称=“每个时代的步骤”)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\training\u generator.py”,第265行,在模型迭代中
批处理输出=批处理功能(*批处理数据)
文件“C:\ProgramData\Miniconda3\envs\TF_2G\lib\site packages\tensorflow_core\python\keras\engine\training.py”,第973行,在批处理的列中
类别权重=类别权重,重置度量=重置度量)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils.py”,第264行,在批处理的列中
输出\损失\度量=模型。\输出\损失\度量)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\training\u eager.py”,第311行,在批处理的列中
输出损失度量=输出损失度量)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\training\u eager.py”,第252行,在单批处理中
培训=培训)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\training\u eager.py”,第127行,在模型中
输出=型号(输入,**kwargs)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\base\u layer.py”,第891行,在调用中__
输出=self.call(强制转换输入,*args,**kwargs)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\sequential.py”,第256行,在调用中
返回超级(顺序,自)。调用(输入,训练=训练,掩码=掩码)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\network.py”,第708行,在调用中
将\u kwargs\u转换为\u常量=基本\u层\u utils.call\u context().saving)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\network.py”,第860行,在内部运行图中
输出张量=层(计算张量,**kwargs)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\engine\base\u layer.py”,第891行,在调用中__
输出=self.call(强制转换输入,*args,**kwargs)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\keras\layers\convolutional.py”,第197行,在调用中
输出=self.\u卷积\u op(输入,self.kernel)
文件“C:\ProgramData\Miniconda3\envs\TF_2G\lib\site packages\tensorflow\u core\python\ops\nn_ops.py”,第1134行,在_调用中__
返回自转换操作(inp,过滤器)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\ops\nn\u ops.py”,第639行,在调用中__
返回自调用(inp、筛选器)
文件“C:\ProgramData\Miniconda3\envs\TF_2G\lib\site packages\tensorflow_core\python\ops\nn_ops.py”,第238行,在u_调用中__
name=self.name)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\ops\nn\u ops.py”,第2010行,conv2d格式
名称=名称)
conv2d中的文件“C:\ProgramData\Miniconda3\envs\TF_2G\lib\site packages\tensorflow\u core\python\ops\gen\u nn\u ops.py”,第1031行
数据\格式=数据\格式,膨胀=膨胀,名称=名称,ctx=\ ctx)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\ops\gen\u nn\u ops.py”,第1130行,位于conv2d\u eager\u fallback中
ctx=_ctx,name=name)
文件“C:\ProgramData\Miniconda3\envs\TF\u 2G\lib\site packages\tensorflow\u core\python\eager\execute.py”,第67行,在quick\u execute中
六、将_从(核心状态)提升到_异常(例如代码、消息),无
文件“”,第3行,从
tensorflow.python.framework.errors\u impl.UnknownError:获取卷积算法失败。这可能是因为cuDNN未能初始化,所以请尝试查看上面是否打印了警告日志消息。[作品:第二辑]
如果我不使用这个命令fit_generator(),那么一切都可以正常工作。有人知道问题出在哪里吗?或者,我如何使用fit()方法实现这一点

如果我不使用这个命令fit_generator(),那么一切都会正常工作 好的有人知道问题出在哪里吗

fit_generator
功能已被弃用,因此您在安装模型时会遇到问题。因此,在使用数据增强技术时,请使用
model.fit
而不是
model.fit\u generator

在正式文件中,它提到了以下内容。详情请参阅

警告:此函数已弃用。它将在将来的版本中删除。更新说明:请使用支持生成器的Model.fit

如何使用fit()方法实现此功能


你好@PokeLu,你能为这个错误提供一个最小的可复制代码吗?@TF\u支持我已经更改了代码。事实证明fit()方法也可以做同样的事情。但是当我尝试从“”运行代码时,出现了相同的问题。嗨@PokeLu,你能给出你用于培训的代码吗?@Veeru我通过避免使用fit_Genera解决了这个问题
model.fit(generator_data(x_train, y_train),
                        batch_size=batch_size,
                        epochs=epochs,
                        validation_data=(x_test, y_test),
                        verbose=1)