Я тренировал маленькую модель, используя керас + тензор потока.У этой модели я пытаюсь выделить несколько категорий изображений.Когда я загружаю эту модель, используя 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
Спасибо всем за помощь