«Первый слой в последовательной модели должен получить аргумент` inputShape` или `batchInputShape`." при загрузке модели Keras с помощью TensorFlow.js - PullRequest
0 голосов
/ 22 апреля 2019

Я обучил следующую модель, используя Керас (Версия 2.2.4):

# imports ...
model = Sequential()
model.add(Conv2D(filters=64, kernel_size=5, data_format="channels_last", activation="relu"))
model.add(BatchNormalization())
model.add(MaxPooling2D(data_format="channels_last"))
model.add(Conv2D(filters=32, kernel_size=3, data_format="channels_last", activation="relu"))
model.add(BatchNormalization())
model.add(MaxPooling2D(data_format="channels_last"))
model.add(Flatten(data_format="channels_last"))
model.add(Dense(units=256, activation="relu"))
model.add(Dense(units=128, activation="relu"))
model.add(Dense(units=32, activation="relu"))
model.add(Dense(units=8, activation="softmax"))
# training ...
model.save("model.h5")

Входными данными являются 28 x 28 полутоновых изображений формы (28, 28, 1).

Model Overview

Я конвертировал модель с tensorflowjs_converter, и теперь я хочу загрузить ее на свой веб-сайт, используя TensorFlow.js (Версия 1.1.0):

tf.loadLayersModel('./model/model.json')

Это приводит к следующей ошибке:

The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.
    at new e (errors.ts:48)
    at e.add (models.ts:440)
    at e.fromConfig (models.ts:1020)
    at vp (generic_utils.ts:277)
    at nd (serialization.ts:31)
    at models.ts:299
    at common.ts:14
    at Object.next (common.ts:14)
    at o (common.ts:14)

Как я могу исправить эту ошибку, не переучивая модель?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Вы должны указать входную форму в слое Conv2D вашей модели keras.

# imports ...
model = Sequential()
model.add(Conv2D(input_shape=(28, 28, 1), filters=64, kernel_size=5, data_format="channels_last", activation="relu"))
model.add(BatchNormalization())
model.add(MaxPooling2D(data_format="channels_last"))
model.add(Conv2D(filters=32, kernel_size=3, data_format="channels_last", activation="relu"))
model.add(BatchNormalization())
model.add(MaxPooling2D(data_format="channels_last"))
model.add(Flatten(data_format="channels_last"))
model.add(Dense(units=256, activation="relu"))
model.add(Dense(units=128, activation="relu"))
model.add(Dense(units=32, activation="relu"))
model.add(Dense(units=8, activation="softmax"))
# training ...
model.save("model.h5")
0 голосов
/ 22 апреля 2019

Попробуйте настроить свою нейронную сеть в следующем формате:

input_img = Input(batch_shape=(None, 28,28,1))
layer1=Conv2D(filters=64, kernel_size=5, data_format="channels_last", activation="relu")(input_img)
layer2=BatchNormalization()(layer1)
.
.
.
final_layer=Dense(units=8, activation="softmax")(previous_layer)

... и так далее. В конце:

model = Model(inputs = input_img, outputs = final_layer)
...