2017-06-16 104 views
0

假设我有一个keras模型和函数train_model(data)来训练它的一些数据。keras分布式模型和数据

我想知道是否可以合并/合并相同的体系结构,相同的hyperparam模型,这些模型是经过分别/独立训练的?

python train_model(data1) ### one one epoch 
python train_model(data2) ### one one epoch 
... 

然后

load(model1) 
load(model2) 
model3 = combine(model1, model2) 
### model3 equivalent to 2 epochs of learning. 

我试图了解/找到一种方法来分发学习。

+0

您应分别建立两个网络(完全相同)经过训练,然后加载的权重为他们每个人。然后您可以使用合并图层合并输出。记住你应该使用'Model' API – Nain

回答

1

你已经试过了吗?

from keras.models import load_model 

# load models - it is just the architecture 
model1 = load_model('path/to/trained/model1.h5') 
model2 = load_model('path/to/trained/model2.h5') 

# load trained weights 
model1.load_weights('path/to/weights/from/model1.hdf5') 
model2.load_weights('path/to/weights/from/model2.hdf5') 

# create a model that will merge both 1 and 2 
model = Sequential() 
model.add(Merge([model1, model2], mode = 'concat')) 
model.add(Dense(1)) # for regression, use you last Dense layer here 
model.compile(#your compiling parameters) 

# use your merged model 
model.predict(dataset_to_be_predicted) 

的想法是从here

+0

你的答案将连接两个加载的模型以形成一个新的体系结构(最后合并两个分支)(btw合并给我一个不推荐的警告)。但这不完全是我想要的。我想结合模型1和模型2来形成模型3,其具有与模型1和模型2相同的架构!以一种平均(或其他)权重的方式。 Model3将混合两种模型的两种学习。 –

+0

我不确定你能做到那么简单。根据体系结构保存权重,这意味着两个不同的体系结构具有不同的权重。合并它们意味着采取平均或类似的方式,但如果数量不同,则不知道要合并的内容。你有没有考虑过使用两种模型进行预测并对结果进行平均?如果是分类,你可以选择具有更高概率的班级。 –

+0

该架构是固定的,所以没有问题。我只想知道是否有可能分别/独立地学习历元,然后以某种方式组合权重以获得一个模型,就好像它已经被两个历元训练一样。 –