3

我正在使用 Tensorflow 中的贝叶斯优化为我的卷积神经网络 (CNN) 进行超参数优化。我收到了这个错误:

ResourceExhaustedError(有关回溯,请参见上文):OOM 分配形状为 [4136,1,180,432] 的张量并通过分配器 GPU_0_bfc 在 /job:localhost/replica:0/task:0/device:GPU:0 上键入 float

我优化了这些超参数:

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]

说资源枯竭。为什么是这样?

是不是因为我优化了太多的超参数?还是有一些尺寸不匹配?或者我是否分配了超出正确操作允许范围的超参数范围?

4

1 回答 1

3

发生 OOM 是因为当几个超参数处于范围的高端时,模型变得太大。例如,假设批量大小约为 1500 左右50dim_num_hidden依此类推。超参数的数量无关紧要,只要几个就足以炸毁模型。

错误消息中的具体张量是[4136,1,180,432]或者1.2Gb如果您使用 32 位浮点数作为参数。这是很多,它只是进行 NN 训练所需的许多张量之一(例如,前向和后向双倍的参数数量和因此的内存)。难怪 TensorFlow 会因 OOM 而失败。

用于超参数调整的贝叶斯优化的一个特殊问题是,该算法很可能选择超空间的角,即一个值接近某个范围内的最小值的点,另一个点的值接近一个范围内的最大值。请参阅此问题中的详细信息。这意味着您必须限制至少一个超参数(通常是批量大小),以便即使其他一切都处于最大值时模型也能拟合。或者你可以很聪明,在每次迭代运行模型之前精确计算它,但这样算法不会优化批量大小。

于 2018-04-10T21:20:40.330 回答