首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DL4J模型中的角化模型转换

DL4J模型中的角化模型转换
EN

Stack Overflow用户
提问于 2019-02-19 11:10:30
回答 2查看 615关注 0票数 3

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

在粒子理论中,我从这样的体系结构开始:

代码语言:javascript
复制
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 300, 300)          219184200 
_________________________________________________________________
lstm_1 (LSTM)                (None, 300, 256)          570368    
_________________________________________________________________
dropout_1 (Dropout)          (None, 300, 256)          0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 128)               197120    
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 258       
=================================================================

在保存和加载之后,我得到了这样的信息(无论是在keras还是DL4J中):

代码语言:javascript
复制
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, None, 300)         219184200 
_________________________________________________________________
lstm_1 (LSTM)                (None, None, 256)         570368    
_________________________________________________________________
dropout_1 (Dropout)          (None, None, 256)         0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 128)               197120    
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 258       
=================================================================

在java中有一个解决方案或工作可以实现这一点吗? 1)是否可以正确地保存和加载keras中的结构和重量?

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

3)是否可以在函数中实现将词转换为嵌入,然后给神经网络以前在嵌入过程中转换的输入?

4)可以用DL4J加载java嵌入层的权值吗?

这是我的网络的代码:

代码语言:javascript
复制
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) 

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-20 09:41:57

我发现,Keras神经网络和DL4J神经网络之间的差异是由于word2Vec (或GloVe)文件解析的不同所致。特别是加载word2Vec,然后解析创建3个字典:- word2Index - index2Word - word2EmbeddingVec

代码语言:javascript
复制
from gensim.models import Word2Vec
modelW2V = Word2Vec.load('C:/Users/Alessio/Desktop/emoji_ita/embedding/glove_WIKI') # glove model

我发现两个不同的解析(使用相同的代码)对配对“索引词”和“单词索引”产生不同的匹配。将字典保存在json文件中,然后从其中加载数据,对我来说是一个解决方案。

希望这也能帮到别人。

票数 3
EN

Stack Overflow用户

发布于 2019-02-20 05:34:47

您可能可以在DL4J Gitter chat:https://gitter.im/deeplearning4j/deeplearning4j上得到这个答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54764896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档