だから私は純粋なを使用してconvnetを構築しましたkeras
。意図したとおりにコンパイルおよび動作しますtf.keras
が、を使用できるように変換して使用する必要がありtfmot
ます。ドキュメントを読んだ後、変換しようとしましたが、次のエラーが発生しました。
The last dimension of the inputs to Dense should be defined. Found None.
私が間違っていることについて何か考えはありますか?
ありがとう!
元のkeras
モデル:
input_layer = keras.layers.Input(shape=(100,))
reshape_layer = keras.layers.Reshape((-1, 100, 1))(input_layer)
conv_layer_1 = keras.layers.Convolution2D(filters=30, kernel_size=(10, 1), strides=(1, 1), padding="same", activation="relu")(reshape_layer)
conv_layer_2 = keras.layers.Convolution2D(filters=30, kernel_size=(8, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_1)
conv_layer_3 = keras.layers.Convolution2D(filters=40, kernel_size=(6, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_2)
conv_layer_4 = keras.layers.Convolution2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_3)
conv_layer_5 = keras.layers.Convolution2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_4)
flatten_layer = keras.layers.Flatten()(conv_layer_5)
label_layer = keras.layers.Dense(200, activation="relu")(flatten_layer)
output_layer = keras.layers.Dense(1, activation="linear")(label_layer)
model = keras.Model(inputs=input_layer, outputs=output_layer)
変換されたtf.keras
モデル:
input_layer = tf.keras.layers.InputLayer(input_shape=(100,))
reshape_layer = tf.keras.layers.Reshape((-1, 100, 1))(input_layer)
conv_layer_1 = tf.keras.layers.Convolution2D(filters=30, kernel_size=(10, 1), strides=(1, 1), padding="same", activation="relu")(reshape_layer)
conv_layer_2 = tf.keras.layers.Convolution2D(filters=30, kernel_size=(8, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_1)
conv_layer_3 = tf.keras.layers.Convolution2D(filters=40, kernel_size=(6, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_2)
conv_layer_4 = tf.keras.layers.Convolution2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_3)
conv_layer_5 = tf.keras.layers.Convolution2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_4)
flatten_layer = tf.keras.layers.Flatten()(conv_layer_5)
label_layer = tf.keras.layers.Dense(200, activation="relu")(flatten_layer)
output_layer = tf.keras.layers.Dense(1, activation="linear")(label_layer)
model = tf.keras.Model(inputs=input_layer, outputs=output_layer)
編集1:
keras
作成後にモデルを保存し、tf.keras
コンパイル/トレーニングの直前にモデルとしてロードすることで、問題を回避できるのではないかと思いました。それは同じエラーをスローします!
コードにいくつかの問題があります。それらを修正すれば、あなたは行ってもいいはずです、
Input
代わりに使用するInputLayer
標準では、Input
代わりにレイヤーを使用しますInputLayer
(実際にはInputLayer
内部で使用します)。また、レイヤーを使用input_shape
してshape
いる場合はに変更する必要がありますInput
。
input_layer = tf.keras.layers.Input(shape=(100,))
None
出力の2次元次の行を実行すると、None
出力に2つの次元が含まれます。
reshape_layer = tf.keras.layers.Reshape((-1, 100, 1))(input_layer)
これが、上記のエラーが発生する理由です。Reshape
レイヤーを定義するときは、batch
ディメンションを定義しません。ディメンションは「なし」になります。そして、それはあなたがレイヤーNone
を使いたいかのようにあなたが持つことができる唯一の次元ですDense
。そうしDense
ないと、レイヤーはその重みの形状を推測できません(これがエラーが発生する理由です)。に変更して、
reshape_layer = tf.keras.layers.Reshape((1, 100, 1))(input_layer)
残りは同じままです。
conv_layer_1 = tf.keras.layers.Convolution2D(filters=30, kernel_size=(10, 1), strides=(1, 1), padding="same", activation="relu")(reshape_layer)
conv_layer_2 = tf.keras.layers.Convolution2D(filters=30, kernel_size=(8, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_1)
conv_layer_3 = tf.keras.layers.Convolution2D(filters=40, kernel_size=(6, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_2)
conv_layer_4 = tf.keras.layers.Convolution2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_3)
conv_layer_5 = tf.keras.layers.Convolution2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_4)
flatten_layer = tf.keras.layers.Flatten()(conv_layer_5)
label_layer = tf.keras.layers.Dense(200, activation="relu")(flatten_layer)
output_layer = tf.keras.layers.Dense(1, activation="linear")(label_layer)
model = tf.keras.Model(inputs=input_layer, outputs=output_layer)
model.summary()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加