我正在使用Tensorflow中的贝叶斯优化进行超参数优化,用于我的卷积神经网络(CNN)。我收到了这个错误:
ResourceExhaustedError(参见上面的回溯):分配时的OOM 张量形状[4136,1,180,432]并键入float on / job:localhost / replica:0 / task:0 / device:GPU:0 by allocator GPU_0_bfc
我优化了这些超参数:
dim_batch_size = Integer(low=1, high=50, name='batch_size')
dim_kernel_size1 = Integer(low=1, high=75, name='kernel_size1')
dim_kernel_size2 = Integer(low=1, high=50, name='kernel_size2')
dim_depth = Integer(low=1, high=100, name='depth')
dim_num_hidden = Integer(low=5, high=1500, name='num_hidden')
dim_num_dense_layers = Integer(low=1, high=5, name='num_dense_layers')
dim_learning_rate = Real(low=1e-6, high=1e-2, prior='log-uniform',
name='learning_rate')
dim_activation = Categorical(categories=['relu', 'sigmoid'],
name='activation')
dim_max_pool = Integer(low=1, high=100, name='max_pool')
dimensions = [dim_batch_size,
dim_kernel_size1,
dim_kernel_size2,
dim_depth,
dim_num_hidden,
dim_num_dense_layers,
dim_learning_rate,
dim_activation,
dim_max_pool]
它说资源已经耗尽。这是为什么?
是因为我优化了太多的超参数?或者有一些尺寸不匹配?或者我是否指定了超出允许范围的超参数范围以进行正确操作?
答案 0 :(得分:2)
50
且dim_num_hidden
大约为1500,依此类推。超参数的数量并不重要,只有少数参数足以炸毁模型。
如果您使用32位浮点数作为参数,则错误消息中的具体张量为[4136,1,180,432]
或1.2Gb
。这是很多,它只是进行NN训练所需的许多张量之一(例如,前向和后向两倍的参数数量,因此是内存)。难怪OOM的张量流失了。
用于超参数调整的贝叶斯优化的一个特殊问题是该算法很可能选择超空间的角,即,一个点在一个范围内接近最小值,另一个点其中值接近范围内的最大值。请参阅this question中的详细信息。这意味着您必须至少限制一个超参数(通常是批量大小),以便即使其他所有内容都处于最大值时模型也适合。或者你可以聪明并在每次迭代运行模型之前精确计算它,但这样算法不会优化批量大小。