Deep learning 将caffe的培训和测试分开,以减少内存使用

Deep learning 将caffe的培训和测试分开,以减少内存使用,deep-learning,caffe,Deep Learning,Caffe,我正在训练我的网络,似乎有足够的内存用于测试网络,但没有足够的内存用于训练: I0411 16:41:04.669823 6823 solver.cpp:331] Iteration 0, Testing net (#0) I0411 16:43:31.625444 6823 solver.cpp:398] Test net output #0: intermediate_loss = nan (* 1 = nan loss) I0411 16:43:31.625897 6823

我正在训练我的网络,似乎有足够的内存用于测试网络,但没有足够的内存用于训练:

I0411 16:41:04.669823  6823 solver.cpp:331] Iteration 0, Testing net (#0)
I0411 16:43:31.625444  6823 solver.cpp:398]     Test net output #0: intermediate_loss = nan (* 1 = nan loss)
I0411 16:43:31.625897  6823 solver.cpp:398]     Test net output #1: loss = nan (* 1 = nan loss)
F0411 16:43:33.259964  6823 syncedmem.cpp:71] Check failed: error == cudaSuccess (2 vs. 0)  out of memory
*** Check failure stack trace: ***
    @     0x2ae6f6039b2d  google::LogMessage::Fail()
    @     0x2ae6f603b995  google::LogMessage::SendToLog()
    @     0x2ae6f60396a9  google::LogMessage::Flush()
    @     0x2ae6f603c42e  google::LogMessageFatal::~LogMessageFatal()
    @     0x2ae6f4e7b0c8  caffe::SyncedMemory::mutable_gpu_data()
    @     0x2ae6f4ce8143  caffe::Blob<>::mutable_gpu_diff()
    @     0x2ae6f4ec3bc6  caffe::EltwiseLayer<>::Backward_gpu()
    @     0x2ae6f4e38dab  caffe::Net<>::BackwardFromTo()
    @     0x2ae6f4e38def  caffe::Net<>::Backward()
    @     0x2ae6f4e5d763  caffe::Solver<>::Step()
    @     0x2ae6f4e5e2da  caffe::Solver<>::Solve()
    @     0x2ae6f4e516c4  caffe::NCCL<>::Run()
    @           0x40ebda  train()
    @           0x40b983  main
    @     0x2ae70b5fab35  __libc_start_main
    @           0x40c42d  (unknown)
I0411 16:41:04.669823 6823 solver.cpp:331]迭代0,测试网(#0)
I0411 16:43:31.625444 6823解算器。cpp:398]测试净输出#0:中间_损耗=nan(*1=nan损耗)
I0411 16:43:31.625897 6823解算器。cpp:398]测试净输出#1:loss=nan(*1=nan损耗)
F0411 16:43:33.259964 6823 syncedmem.cpp:71]检查失败:错误==cudaSuccess(2对0)内存不足
***检查故障堆栈跟踪:***
@0x2ae6f6039b2d google::LogMessage::Fail()
@0x2ae6f603b995 google::LogMessage::SendToLog()
@0x2ae6f60396a9 google::LogMessage::Flush()
@0x2ae6f603c42e谷歌::LogMessageFatal::~LogMessageFatal()
@0x2ae6f4e7b0c8 caffe::SyncedMemory::可变的gpu数据()
@0x2ae6f4ce8143 caffe::Blob::可变_gpu_diff()
@0x2ae6f4ec3bc6 caffe::EltwiseLayer::BackwardGPU()
@0x2ae6f4e38dab caffe::Net::BackwardFromTo()
@0x2ae6f4e38def caffe::Net::Backward()
@0x2ae6f4e5d763 caffe::解算器::步骤()
@0x2ae6f4e5e2da caffe::解算器::解算()
@0x2AE6F416C4 caffe::NCCL::Run()
@0x40ebda列()
@0x40b983主
@0x2ae70b5fab35自由启动主
@0x40c42d(未知)

在我的
solver.prototxt
中,我有
测试网:…
训练网:…
。我觉得caffe在测试和训练时使用了更多的记忆。如何防止这种情况发生?

您有不同的培训和测试批量吗?您可以通过减少培训批大小来防止此错误。嗯,减少培训批大小可能会导致不太好的结果。为什么训练的记忆使用率高于测试@因为在训练中,你需要在反向传播时计算梯度。。。那会占用很多空间。诚然,减少训练批大小有时会导致性能降低,但一个合适的批大小(如32或50)应该可以。