我用Tensorflow后端在Keras上做了一个CNN,我的训练集有144个例子,但是每个例子的大小都是3200*101。我的CNN非常基本,只是为了学习,batch_size为2(我试着把它从32减少,但没有任何改善)。一个CNN图层,一个平面图层和一个密集图层用于输出(11个类)。当我拟合模型时,我的笔记本电脑显示“分配(一个大数字)超过10的系统内存”,然后冻结,甚至没有运行1个历元。我不能“压缩”的例子,我运行的是我的CPU(我没有GPU),8 GB内存,1 TB磁盘上的模型。我能做什么?
对不起,我的英语不好,我还在学习中。谢谢你的回答!
更新-编辑:只是添加更多信息。
例如,我的火车集的形状为(144,3400,101,1),标签的形状为(144,11)。我的模型如下:
model.add(Conv2D(8, kernel_size=6, activation='linear', input_shape=(3400,101,1), batch_size=2))
model.add(Flatten())
model.add(Dense(11, activation='softmax'))
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=100)
2条答案
按热度按时间ddhy6vgd1#
以上步骤使32G交换空间。然后运行你的深度学习代码。我的工作很好。
我的笔记本电脑规格是惠普430 g2 4G内存+ 500 G固态硬盘
mbzjlibv2#
这看起来和我在Keras的一个简单的前馈网络中使用很长的输入编码时遇到的错误一样。我一直在使用单词嵌入,没有问题,但是现在我在输入中添加了额外的特性,我得到了和你一样的错误。你需要启用更多的内存来供你的脚本使用。在kubernetes中,对我起作用的是增加pod的yml文件中的内存:
它最初是8G的,在我介绍附加功能之前就已经工作了。如果你不使用Docker和K8s,你可以在你的tensorflow会话中使用:
config.gpu_options.allow_growth = True
在凯拉斯,我想那会是:
将
batch_size
减小到1可能会解决此问题。通常此错误只是一个警告,即使作业冻结,如果让它继续运行,它也可能会完成。但如果作业被终止(就像我的一样),那么你肯定需要给予它更多的内存,GPU服务器可能是一个比笔记本电脑更好的主意。您还可以确保您使用的是float32
而不是float64
,因为这样会使用双倍的内存。此外,据我所知,Adam优化器通常会出现此错误,因此您使用SGD的事实意味着问题可能不在优化过程中。