【问题标题】:Issue with keras fit_generator epochkeras fit_generator 时代的问题
【发布时间】:2020-08-01 21:26:09
【问题描述】:

我正在创建一个使用 Keras 生成文本的 LSTM 模型。由于我使用的数据集(大约 25 部小说,大约 140 万字)无法一次处理(将输出转换为_Categorical()的内存问题),我创建了一个自定义生成器函数来读取数据。

# Data generator for fit and evaluate
def generator(batch_size):
    start = 0
    end = batch_size
    while True:
      x = sequences[start:end,:-1]
      #print(x)
      y = sequences[start:end,-1]
      y = to_categorical(y, num_classes=vocab_size)
      #print(y)
      yield x, y
      if batch_size == len(lines):
        break;
      else:
        start += batch_size
        end += batch_size

当我执行 model.fit() 方法时,在 1 个 epoch 完成训练后会抛出以下错误。

UnknownError:  [_Derived_]  CUDNN_STATUS_BAD_PARAM
in tensorflow/stream_executor/cuda/cuda_dnn.cc(1459): 'cudnnSetTensorNdDescriptor( tensor_desc.get(), data_type, sizeof(dims) / sizeof(dims[0]), dims, strides)'
     [[{{node CudnnRNN}}]]
     [[sequential/lstm/StatefulPartitionedCall]] [Op:__inference_train_function_25138]

Function call stack:
train_function -> train_function -> train_function

有谁知道如何解决这个问题?谢谢

【问题讨论】:

  • 问题解决了吗?您使用的 tensorflow 版本是什么?是否可以共享可重现的代码?

标签: python tensorflow keras deep-learning


【解决方案1】:

从 Internet 上的许多来源来看,在使用 LSTM LayerMasking Layer 以及在 GPU 上进行培训时似乎会出现此问题。

下面提到的可能是解决此问题的方法:

  1. 如果您可以在速度上妥协,您可以在 CPU 而不是 GPU 上训练您的 Model。它可以正常工作。

  2. 根据this comment,请检查您的Input Sequences 是否包含所有零,因为Masking Layer 可能会掩盖所有Inputs

  3. 如果可能,您可以禁用Eager Execution。根据this comment,它可以正常工作。

  4. 您可以尝试this link中提到的替代方案,而不是使用掩蔽层

    一个。将参数mask_zero = True 添加到Embedding Layer。或

    b.调用支持该参数的层时手动传递掩码参数

  5. 如果可能的话,最后的解决方案是删除 Masking Layer

如果上述解决方法都不能解决您的问题,Google Tensorflow 团队正在努力解决此错误。我们可能要等到这个问题解决了。

希望这些信息对您有所帮助。快乐学习!

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 2017-11-17
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2018-03-20
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多