def train(self,sequences,labels,features,publish_years,pids,superparams,cut=None,predict_year=2000,max_iter=0,max_outer_iter=200):
from keras.layers import Input, Dense, Masking, LSTM, Activation, Dropout, merge
from keras.models import Model
from keras.regularizers import l1,l2
f = Input(shape=(1,len(features[0])),dtype='float')
# features[paper][feature], sequences[paper][day][feature]
k = Dense(len(sequences[0][0]),activation='relu',W_regularizer=l1(self.l1))(f)
# k = merge([k,k],mode='concat',concat_axis=1)
k1 = Dropout(0.5)(k)
k2 = Input(shape=(len(sequences[0]),len(sequences[0][0])),dtype='float')
g1 = merge([k1,k2],mode='concat',concat_axis=1)
m1 = Masking(mask_value= -1.)(g1)
n1 = LSTM(128,W_regularizer=l2(self.l2),dropout_W=0.5,dropout_U=0.5)(m1)
n1 = Dense(2,activation='softmax')(n1)
model = Model(inputs=[f,k2], outputs=[n1])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['categorical_accuracy'])
model.fit(
[numpy.array([[f] for f in features]),numpy.array(sequences)], [numpy.array(labels)],
epochs=500, batch_size=1,
verbose=1,validation_split=0.2)
self.params['model'] = model
# embeddings = model.layers[1].W.get_value()
return model
评论列表
文章目录