Функциональный API Keras не создает никаких слоев в Google colab (model.summary() не выводит слой).

#tensorflow #keras #functional-api

Вопрос:

Обобщение проблем

Я создал модель keras с помощью функционального API без какой-либо ошибки.

Но когда я вызываю model.summary(), там нет никаких слоев, а существуют только параметры.

Когда я позвоню модели.слои, возвращается пустой список.

Например, я создал простую модель 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')
 

приведенный выше код выполняется без каких-либо ошибок.
но когда я вызываю метод сводки или метод слоев, никаких слоев не возникает.

 model.layers

-> []

model.summary()

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

но эта модель может быть обучена и выведена, несмотря на отсутствие каких-либо слоев.
И еще более странно то, что это происходит только в Google colab pro. В ядре kaggle
один и тот же код создает все слои без каких-либо проблем.

Чтобы создать более сложную модель с функциональным API, должны существовать слои. Кто-нибудь знает причину, по которой это происходит в Google colab?

Комментарии:

1. Вероятно, вы смешали библиотеки keras и tensorflow. Проверьте свой импорт. Или добавьте их к своему вопросу.

2. Что вы подразумеваете под «смешанным» керасом и тензорным потоком ? В своем коде я написал ` ` импорт tensorflow как tf из tensorflow импорт кераса «» Что-то не так 🙂 ?

3. Я подробнее остановился на ответе. Проверить это.

Ответ №1:

Вероятно, вы смешиваете библиотеки keras и tensorflow. Поскольку Tensorflow внедрил библиотеки keras, это распространенная ошибка разработчиков, которые импортируют keras и tensorflow и используют их оба случайным образом, и это приводит к некоторому странному поведению.

Просто используйте или import tensorflow.keras или import 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
_________________________________________________________________
 

Комментарии:

1. Проблема решена! Я очень признателен вам за ваши объяснения. Спасибо!