Я пытаюсь преобразовать обученную модель цепочки в обученную модель керас в надежде преобразовать ее в coreml.Моя попытка сделать это состоит в том, чтобы напрямую установить веса моделированной модели keras с той же архитектурой, что и у модели с цепочкой.Посредством отладки я заметил, что формы весовых матриц меняются при настройке их в Керасе.Проблема в том, что выходы двух моделей различаются.В модели keras первый слой получает правильные результаты, но большинство обнуляется непредсказуемым образом.Есть ли другие параметры для обученной модели керас, которые мне не хватает?
import chainer
import cv2 as cv
import numpy as np
import argparse
import sys
import os
import evaluation_util
from keras.layers import merge, Convolution2D, Input
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
import projection_gan
import keras
from keras.layers import Dense, Input, Activation
from keras.models import Model
from keras.utils import plot_model
def create_keras_model():
inputs = Input(shape=(34,))
l1 = Dense(1024, activation='relu')(inputs)
l2 = Dense(1024, activation='relu')(l1)
l3 = Dense(1024)(l2)
l3 = keras.layers.add([l1,l3])
l3 = Activation('relu')(l3)
l4 = Dense(17)(l3)
model = Model(inputs=inputs, outputs=l4)
return model
def main(args):
model = evaluation_util.load_model(vars(args))
chainer.serializers.load_npz(args.lift_model, model)
keras_model = create_keras_model()
plot_model(keras_model, to_file='model.png')
weights_list = [model.l1.W.array.transpose(), model.l1.b.array,
model.l2.W.array.transpose(), model.l2.b.array,
model.l3.W.array.transpose(), model.l3.b.array,
model.l4.W.array.transpose(), model.l4.b.array]
keras_model.set_weights(weights_list)
keras_model.save("keras.h5")
Пример вывода из первого слоя:
Цепочка (правильная модель):
0.012310047, -0,0038410246, 0,019623855, 0,01872946, -0,010116328, ...
Керас:
0,012310054, 0,0, 0,0, 0,01872946, 0,0, ...