TensorFlow训练报错:ResourceExhaustedError: OOM when allocating tensor device:GPU:0 by allocator G

使用TensorFlow训练某些较大模型时会发生内存溢出,如果 已经安装了TensorFlow-GPU版本,训练时会优先调用GPU版本的TensorFlow,而一般电脑上显存比较小,很容易发生溢出,就会出现如下报错:

ResourceExhaustedError:  OOM when allocating tensor with shape[1024,728,1,1] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
	 [[node model/block13_sepconv2/separable_conv2d (defined at <ipython-input-41-425b3e9b7078>:11) ]]
Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.
 [Op:__inference_train_function_41706]
 
Function call stack:
train_function

解决方案:

1. CPU进行训练

尝试使用CPU进行训练,将model.fit()代码做如下修改:

with tf.device("/cpu:0"):
    history = model.fit(替换成自己的代码)

输出:

Epoch 1/50
43/86 [===========>.............] - ETA: 16:08 - loss: 0.4574 - 
accuracy: 0.8438

2. Jupyter notebook

tf.keras.backend.clear_session()

如果在notebook中运行了很多代码,则会占用一定的内存,上面的代码顾名思义就是清楚掉之前运行的一些session,以释放空间。

3. 修改batch_size

如果还是不行,则只能修改代码,将批次数batch_size改小一些,每次给模型喂入小批量的数据。

### 回答1: Jupyter出现NameError可能是因为变量或函数名未定义或拼写错误。请检查代码中的变量和函数名是否正确,并确保它们已经定义或导入。另外,也可能是因为代码中的某些语句没有正确执行,导致变量未定义。建议逐行检查代码并尝试调试。 ### 回答2: Jupyter是一个非常受欢迎的交互式笔记本编程环境。当用户在使用Jupyter时出现nameerror时,这通常是因为代码中使用了未定义的变量或方法。此错误提示表明,解释器无法识别代码中的名称,并提示用户需要事先定义才能使用。 要解决这个问题,用户可以采取以下几个步骤: 1.审查代码-查看错误提示所涉及的行,确认代码中所引用的变量或方法名是否拼写正确,是否在先前的代码中已经进行了定义,以及是否正确导入了需要使用的包或模块。 2.检查变量或方法的作用域--变量或方法的作用域可能会导致名称错误,如果变量或方法在某个函数或类的内部定义,但是在全局环境中使用,就会产生错误提示。 3.检查程序的运行环境--如果用户在运行Jupyter的同时也在使用其他应用程序,可能会发生名称错误。在这种情况下,关闭其他应用程序,重新启动Jupyter可能有助于解决问题。 4.重启内核-有时,解决名称错误可以通过重启Jupyter内核的方式来实现。在Jupyter界面中选择“Kernel”选项卡,然后选择“Restart Kernel”即可重启内核,以清除任何可能影响代码运行的错误。 总的来说,名称错误是程序编写中常见的错误类型,通常是由于代码中的命名问题导致的。检查代码、变量和方法的作用域、程序运行环境和重启内核是解决问题的有效方法。如果这些方法不能解决问题,建议用户参考相关的编程文档或寻求专业的编程支持。 ### 回答3: Jupyter是一个流行的开源数据科学工具,它提供了交互式计算环境,尤其适用于数据分析和数据可视化。 当使用Jupyter进行编码时,经常会遇到NameError的报错,这是因为在代码中使用了未定义的变量或函数名称。在Jupyter中,这种错误一般是在运行代码之前或在代码块中的某个位置引用了未定义的变量或函数名称。 解决这种问题的方法是需要检查代码中是否存在拼写错误或者变量初始化的问题。有时可能需要调整代码的顺序或者增加代码块来确保变量被正确初始化。 在Jupyter中可以使用变量观察功能来检查变量的值,也可以在代码中增加打印调试语句来观察程序运行的过程。 当然,在遇到NameError之前,我们需要保证代码的正确性,比如语法正确、逻辑正确等,这就需要编写高质量的代码,遵循最佳实践,使用命名规范等。 总之,遇到NameError并不是一个终点,而是一个调试程序的起点,需要分析问题原因,增强代码的鲁棒性和代码健壮性。这将有助于提高代码的可维护性和可扩展性,从而更好地完成数据科学工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AiCharm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值