我(仍然)试图在Tensorflow 2.0后端上使用Keras实现一个简单的Unet网络。我的模板和蒙版是1536x1536 RGB图像(蒙版是黑白的)。根据本文,可以测量所需的内存量。我的模型在张量 [1,16,1536,1536] 上因内存分配错误而崩溃。使用上面文章中给出的等式,我计算了此张量所需的内存量:1 * 16 * 1536 * 1536 * 4 = 144 MB。我有GTX 1080 Ti,其中大约9 GB可用于Tensorflow。哪里出错了?我错过了什么吗?以下是几乎完全的回溯:我正在尝试将嗅探时间转换为秒数。我已经在Python Pandas DataFrame中查看了将timedelta64[ns]列转换为秒,但是该解决方案不起作用。我想也许熊猫线可能有错。print(sniffTime)print(type(sniffTime))输出:821693000 nanoseconds<class 'numpy.timedelta64'>错误AttributeError: 'numpy.timedelta64' object has no attribute 'total_seconds'在线:df['PerSec']=df['PerSec'].div(sniffTime.total_seconds())2020-03-02 15:59:13.841967: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll2020-03-02 15:59:16.083234: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX22020-03-02 15:59:16.087240: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll2020-03-02 15:59:16.210856: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.607
2 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
您的情况是图像的尺寸。
它不是像其他人在评论中所说的那样的模型尺寸,而是图像的输入尺寸,需要更多的GPU内存才能进行处理。
在这种情况下,解决方案是用二倍的系数对图像进行下采样。您需要使用完全相同的因子划分宽度和高度,以保持宽高比,从而使网络即使在较小的图像上也能学习,而不会丢失太多信息并引入失真。
您将能够在768x768的GTX 1080上使用batch_size 1进行训练(我有一台GTX 1080Ti,我测试了几个具有多个输入维度的分段网络)。如果由于某些原因,您的GPU消耗被其他进程(例如YT或类似进程)所消耗,那么将其降低到512x512肯定会起作用(即使在batch_size = 1上使用768x768,它也应该有效)
慕虎7371278
TA贡献1802条经验 获得超4个赞
当然,一个张量可能会占用那么多内存,但你还必须保存网络中的所有变量,以及要向后传播的值。这使得计算操作要求变得复杂(尽管并非不可能)。网络的操作空间非常大。
添加回答
举报
0/150
提交
取消