Keras 函数式 API 不会在 google colab 上创建任何层(model.summary() 不打印任何层)



问题摘要

我使用函数API创建了keras模型,没有任何错误。

但当我调用model.summary((时,不存在任何层,只存在参数。

当我调用model.layers时,会返回空列表。

例如,我创建了一个简单的mlp模型。

input = Input(shape = (20,))
x = Dense(30, name = 'dense1')(input)
x = Dense(20, name = 'dense2')(x)
output = Dense(1)(x)
model = keras.models.Model(inputs = input ,outputs = output)
model.compile(loss = 'mse', optimizer = 'adam')

上面的代码被执行,没有任何错误。但当我调用summary方法或layers方法时,不会出现任何层。

model.layers
-> []
model.summary()
-> Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
Total params: 1,271
Trainable params: 1,271
Non-trainable params: 0
_________________________________________________________________

但是该模型能够被训练和推理,尽管不具有任何层。更奇怪的是,这种情况只发生在谷歌colab专业版上。在kaggle内核中,相同的代码可以毫无问题地创建所有层。

为了使用功能性API构建更复杂的模型,必须存在层。有人知道谷歌colab上发生这种情况的原因吗?

您可能正在混合keras和tensorflow库。由于Tensorflow实现了keras库,这是导入keras和Tensorflow并随机使用它们的开发人员之间的常见错误,这导致了一些奇怪的行为。

只需在整个代码中使用import tensorflow.kerasimport keras即可

例如,如果我这样编码(随机使用两个库(:

import keras                                #import keras
import tensorflow as tf
from tensorflow.keras.layers import Dense   #import layers from tensorflow.keras
from tensorflow.keras import Input
input = Input(shape = (20,))
x = Dense(30, name = 'dense1')(input)
x = Dense(20, name = 'dense2')(x)
output = Dense(1)(x)
model = keras.models.Model(inputs = input ,outputs = output)
model.compile(loss = 'mse', optimizer = 'adam')
model.summary()

输出为:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
Total params: 1,271
Trainable params: 1,271
Non-trainable params: 0
_________________________________________________________________

但是如果我修改导入并只使用tensorflow.keras而不使用keras,就像这样:

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Input
from tensorflow.keras.models import Model
input = Input(shape = (20,))
x = Dense(30, name = 'dense1')(input)
x = Dense(20, name = 'dense2')(x)
output = Dense(1)(x)
model = Model(inputs = input ,outputs = output)
model.compile(loss = 'mse', optimizer = 'adam')
model.summary()

我会得到这样的输出:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         [(None, 20)]              0         
_________________________________________________________________
dense1 (Dense)               (None, 30)                630       
_________________________________________________________________
dense2 (Dense)               (None, 20)                620       
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 21        
=================================================================
Total params: 1,271
Trainable params: 1,271
Non-trainable params: 0
_________________________________________________________________

相关内容

  • 没有找到相关文章

最新更新