Добавленный слой должен быть экземпляром класса Layer. Найдено: <tenorflow.python.keras.engine.input_layer.InputLayer объект по адресу 0x000001FA104CBB70>
Я новичок в машинном обучении. Я следовал этому уроку по тонкой настройке моделей VGG16.
Модель отлично загружена с этим кодом:
vgg_model = tensorflow.keras.applications.vgg16.VGG16()
но получает эту ОШИБКУ:
TypeError: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.input_layer.InputLayer object at 0x000001FA104CBB70>
При запуске этого кода:
model = Sequential()
for layer in vgg_model.layers[:-1]:
model.add(layer)
зависимости:
- Керас 2.2.3
- Tensorflow 1.12.0
- tensorflow-gpu1.12.0
- Python 3.6.0
Я слежу за этим блогом, но вместо этого я хочу использовать VGG16.
Любая помощь, чтобы исправить это будет оценено. Огромное спасибо.
4 ответа
Это не будет работать, потому что слой tenorflow.keras добавляется в модель keras.
vgg_model = tensorflow.keras.applications.vgg16.VGG16()
model = keras.Sequential()
model.add(vgg_model.layers[0])
Создайте файл tenorflow.keras.Sequential(). Это будет работать
model = tensorflow.keras.Sequential()
model.add(vgg_model.layers[0])
Добавляя к ответу @Manoj Mohan, вы можете добавить input_layer
на ваш model
с помощью input_layer
от Keras
layers
как показано ниже:
import keras
from keras.models import Sequential
from keras.layers import InputLayer
model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....
если вы используете TensorFlow
встроенный Keras
то импорт другой, все остальное то же самое
import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import InputLayer
model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....
Переходя к основной части, если вы хотите импортировать слои в свою последовательную модель, вы можете использовать следующий синтаксис.
import keras
from keras.models import Sequential, load_model
from keras import optimizers
from keras.applications.vgg16 import VGG16
from keras.applications.vgg19 import VGG19
# For VGG16 loading to sequential model
model = Sequential(VGG16().layers)
# For VGG19 loading to sequential model
model = Sequential(VGG19().layers)
Вам не нужно создавать InputLayer, вы просто должны импортировать слой BatchNormalization так же, как ваш Conv2D/ другие слои, например:
from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dropout, BatchNormalization
Вместо того, чтобы импортировать его как независимый слой Keras, то есть:
from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dropout
from keras.layers import BatchNormalization
Приведенный выше фрагмент кода работает для
TensorFlow
версия
2.x
. Вы можете запустить приведенный выше фрагмент, обновив TensorFlow с помощью следующей команды:
pip install --upgrade tensorflow