web-dev-qa-db-ja.com

追加されたレイヤーはLayerクラスのインスタンスでなければなりません。見つかった:<tensorflow.python.keras.engine.input_layer.InputLayer>

機械学習は初めてです。私はVGG16モデルの微調整について tutorial に従っていました。

このコードでモデルは正常にロードされました:

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)

依存関係:

  • Keras 2.2.3
  • Tensorflow 1.12.0
  • tensorflow-gpu1.12.0
  • Python 3.6.0

私はこれをフォローしています blog 代わりに、VGG16を使用したいと思います。

これを修正するための助けがあれば幸いです。どうもありがとうございます。

11
Rstynbl

Tensorflow.kerasレイヤーがケラスモデルに追加されているため、これは機能しません。

vgg_model = tensorflow.keras.applications.vgg16.VGG16()
model = keras.Sequential()
model.add(vgg_model.layers[0])

Tensorflow.keras.Sequential()をインスタンス化します。これは動作します。

model = tensorflow.keras.Sequential()
model.add(vgg_model.layers[0])
13
Manoj Mohan

InputLayerを作成する必要はなく、Conv2D /その他のレイヤーと同じ方法でBatchNormalizationレイヤーをインポートするだけです。

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
2

@Manoj Mohanの回答に追加すると、以下のようにmodelKerasの_input_layer_を使用してlayersに_input_layer_を追加できます。

_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)
_
1
kgangadhar