为什么更小的Keras型号内存不足?

2024-10-02 08:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Keras模型,它由不同的层组成。其中一层实际上是另一个完整的模型。当该层模型为VGG16时,我可以训练uber模型。这是模型。摘要()

enter image description here

当我简单地换掉VGG16,换上EfficientNetB0(一款小得多的车型!),我就不能再训练uber车型了。这是模型。摘要()

enter image description here

“啊,”你说,“一些可训练的重量,一些记忆中的梯度,一些东西。”

好的,当然可以。让我们收缩和/或核化一组层,以便将可训练权重降低到VGG16版本以下。这么做之后,我仍然无法训练uber模型!这是模型。摘要()

enter image description here

为什么我不能训练占总重量30%和可训练重量25%的更小模型

示例代码:

img = Input(shape = (224,224,3))
# ^ Don't reuse img= or Tensorflow will break!
x = BatchNormalization()(img)
x = Efnet(x)
# x = Vgg16(x)
x = Activation('linear')(x)
# ^ Don't remove pass through or Tensorflow will break!
x = GeneralizedMeanPool2D(x)
x = NormActDrop(x)
x = DenseNormActDrop(x, 32)
x = DenseNormActDrop(x, 32)
x = DenseNormActDrop(x, 32)
x = Dense(1)(x)

model = Model(inputs = img, outputs = x)
model.summary()

自定义块与您想象的一样简单,例如:

def NormActDrop(x, activation_function = mish, dropout_rate = 0.2):

    x = BatchNormalization()(x)
    x = Activation(activation_function)(x)
    x = Dropout(dropout_rate)(x)

    return x

Tags: or模型imgtensorflowactivationwill重量don
1条回答
网友
1楼 · 发布于 2024-10-02 08:18:23

根据您使用的Tensorflow版本和报告的错误,可能会有很多答案。我在过去发现的一个答案是,对于某些模型,如果将allow_growth参数设置为False,则该模型将在GPU中运行。您可以尝试将其设置为True

See this stack overflow question and answer for more details


不过,像这样的事情可能会奏效

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)

让我知道这是否有帮助。一般来说,请发布有关问题的更多详细信息(可复制代码、堆栈跟踪等)

相关问题 更多 >

    热门问题