在DL4J模型中转换keras模型

在DL4J模型中转换keras模型,keras,deeplearning4j,dl4j,Keras,Deeplearning4j,Dl4j,我必须用java保存并加载一个keras模型,然后我想我可以使用DL4J。问题是,当我保存我的模型时,它没有自己权重的嵌入层。 我在keras中重新加载模型时遇到了同样的问题,但在这种情况下,我可以创建相同的体系结构并只加载模型的权重 特别是,我从这样的体系结构开始: 在保存和加载之后,我得到了这个(在keras和DL4J中): 在java中有解决方案或解决方法吗? 1) 是否有可能保存并正确加载结构和重量(单位:keras) 2) 是否可以使用DL4J或其他库在java中创建这种类型的模型

我必须用java保存并加载一个keras模型,然后我想我可以使用DL4J。问题是,当我保存我的模型时,它没有自己权重的嵌入层。 我在keras中重新加载模型时遇到了同样的问题,但在这种情况下,我可以创建相同的体系结构并只加载模型的权重

特别是,我从这样的体系结构开始:


在保存和加载之后,我得到了这个(在keras和DL4J中):

在java中有解决方案或解决方法吗? 1) 是否有可能保存并正确加载结构和重量(单位:keras)

2) 是否可以使用DL4J或其他库在java中创建这种类型的模型

3) 是否有可能将转换字嵌入到函数中,然后将先前在嵌入中转换的输入提供给神经网络

4) 我可以用DL4J在java的嵌入层中加载权重吗

这是我的网络的代码:

sentence_indices = Input(shape=input_shape, dtype=np.int32)
emb_dim = 300  # embedding di 300 parole in italiano
embedding_layer = pretrained_embedding_layer(word_to_vec_map, word_to_index, emb_dim)

embeddings = embedding_layer(sentence_indices)   

X = LSTM(256, return_sequences=True)(embeddings)
X = Dropout(0.15)(X)
X = LSTM(128)(X)
X = Dropout(0.15)(X)
X = Dense(num_activation, activation='softmax')(X)

model = Model(sentence_indices, X)

sequentialModel = Sequential(model.layers) 

提前感谢。

您可能会在DL4J Gitter聊天中得到答案:

我发现Keras神经网络和DL4J神经网络之间的差异是由于word2Vec(或手套)文件的不同解析造成的。 特别是加载word2Vec,然后解析以创建3个字典: -Word2索引 -index2Word -word2EmbeddingVec

from gensim.models import Word2Vec
modelW2V = Word2Vec.load('C:/Users/Alessio/Desktop/emoji_ita/embedding/glove_WIKI') # glove model
我发现两种不同的解析(使用相同的代码)为“index-word”和“word-index”产生不同的匹配。将字典保存在json文件中,然后从中加载数据对我来说是一个解决方案

希望这也能帮助别人

sentence_indices = Input(shape=input_shape, dtype=np.int32)
emb_dim = 300  # embedding di 300 parole in italiano
embedding_layer = pretrained_embedding_layer(word_to_vec_map, word_to_index, emb_dim)

embeddings = embedding_layer(sentence_indices)   

X = LSTM(256, return_sequences=True)(embeddings)
X = Dropout(0.15)(X)
X = LSTM(128)(X)
X = Dropout(0.15)(X)
X = Dense(num_activation, activation='softmax')(X)

model = Model(sentence_indices, X)

sequentialModel = Sequential(model.layers) 
from gensim.models import Word2Vec
modelW2V = Word2Vec.load('C:/Users/Alessio/Desktop/emoji_ita/embedding/glove_WIKI') # glove model