#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. Проблема решена! Я очень признателен вам за ваши объяснения. Спасибо!