Проблема с открытием модели keras в java с deeplearning4j (https://deeplearning4j.org/) - PullRequest
0 голосов
/ 18 апреля 2019

Я тренировал маленькую модель, используя керас + тензор потока.У этой модели я пытаюсь выделить несколько категорий изображений.Когда я загружаю эту модель, используя python + keras, она работает нормально и делает прогноз удовлетворительным образом.

Проблема начинается, когда я пытаюсь открыть эту модель в Java-приложении с использованием deeplearning4j lib

Ниже приведен исходный код, используемый для создания модели keras и ее экспорта в файл .h5, ифайл импорта Java .h5

Здесь моя структура модели определена в python


img_width, img_height = 150, 150
batch_size = 32
samples_per_epoch = 1000
validation_steps = 300
nb_filters1 = 32
nb_filters2 = 64
conv1_size = 3
conv2_size = 2
pool_size = 2
classes_num = 3
lr = 0.0004

model = Sequential()
model.add(Convolution2D(nb_filters1, conv1_size, conv1_size, border_mode ="same", input_shape=(img_width, img_height, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))

model.add(Convolution2D(nb_filters2, conv2_size, conv2_size, border_mode ="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(pool_size, pool_size), dim_ordering='th'))


model.add(Flatten())
model.add(Dense(256))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(classes_num, activation='softmax'))


model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.RMSprop(lr=lr),
              metrics=['accuracy'])
...
...
...

model.save('./testesAndre/Exemplos_Keras/model/Docs_model.h5')

Здесь Java-код для открытия модели keras

import org.deeplearning4j.nn.modelimport.keras.KerasModelImport;

...

String simpleMlp = new ClassPathResource(sFilePath).getFile().getPath();
this.kerasH5Model = KerasModelImport.importKerasSequentialModelAndWeights(simpleMlp,true);

Ошибка при попытке импортировать модель в java с использованием библиотеки deeplearning4j lib

org.deeplearning4j.nn.modelimport.keras.exceptions.InvalidKerasConfigurationException: Cannot assign arrays: arrays must both be scalars, both vectors, or shapes must be equal other than size 1 dimensions. Attempting to do x.assign(y) with x.shape=[87616, 256] and y.shape=[88800, 256]
Tried to set weights for layer with name dense_1, of class org.deeplearning4j.nn.conf.layers.DenseLayer.
Failed to set weights for parameter W
Expected shape for this parameter: Rank: 2,Offset: 0
 Order: f Shape: [87616,256],  stride: [1,87616], 
got: Rank: 2,Offset: 0
 Order: c Shape: [88800,256],  stride: [256,1]. For more information, see http://deeplearning4j.org/model-import-keras.
    at org.deeplearning4j.nn.modelimport.keras.KerasLayer.copyWeightsToLayer(KerasLayer.java:334)
    at org.deeplearning4j.nn.modelimport.keras.utils.KerasModelUtils.copyWeightsToModel(KerasModelUtils.java:76)
    at org.deeplearning4j.nn.modelimport.keras.KerasSequentialModel.getMultiLayerNetwork(KerasSequentialModel.java:248)
    at org.deeplearning4j.nn.modelimport.keras.KerasSequentialModel.getMultiLayerNetwork(KerasSequentialModel.java:235)
    at org.deeplearning4j.nn.modelimport.keras.KerasModelImport.importKerasSequentialModelAndWeights(KerasModelImport.java:181)

Извините, если я совершаю какую-то первичную ошибку, потому что это перваяраз я использую python и deeplearnig4l lib

Спасибо всем за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...