我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用keras.layers.Embedding()。
def create_model(self, ret_model = False): image_model = Sequential() image_model.add(Dense(EMBEDDING_DIM, input_dim = 4096, activation='relu')) image_model.add(RepeatVector(self.max_length)) lang_model = Sequential() lang_model.add(Embedding(self.vocab_size, 256, input_length=self.max_length)) lang_model.add(LSTM(256,return_sequences=True)) lang_model.add(TimeDistributed(Dense(EMBEDDING_DIM))) model = Sequential() model.add(Merge([image_model, lang_model], mode='concat')) model.add(LSTM(1000,return_sequences=False)) model.add(Dense(self.vocab_size)) model.add(Activation('softmax')) print ("Model created!") if(ret_model==True): return model model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return model
def _get_embedding_layer(self, embedding_file=None): if self.embedding_layer is None: if embedding_file is None: if not self.tune_embedding: print >>sys.stderr, "Pretrained embedding is not given. Setting tune_embedding to True." self.tune_embedding = True embedding = None else: # Put the embedding in a list for Keras to treat it as initiali weights of the embedding # layer. embedding = [self.data_processor.get_embedding_matrix(embedding_file, onto_aware=False)] vocab_size = self.data_processor.get_vocab_size(onto_aware=False) self.embedding_layer = Embedding(input_dim=vocab_size, output_dim=self.embed_dim, weights=embedding, trainable=self.tune_embedding, mask_zero=True, name="embedding") return self.embedding_layer
def build(self, input_shape): # input shape is (batch_size, num_words, num_senses, num_hyps) self.num_senses = input_shape[-2] self.num_hyps = input_shape[-1] - 1 # -1 because the last value is a word index # embedding of size 1. if self.set_sense_priors: self.sense_priors = self._get_initial_sense_priors((self.word_index_size, 1), name='{}_sense_priors'.format(self.name)) else: # OntoLSTM makes sense proabilities uniform if the passed sense parameters are zero. self.sense_priors = K.zeros((self.word_index_size, 1)) # uniform sense probs # Keeping aside the initial weights to not let Embedding set them. It wouldn't know what sense priors are. if self.initial_weights is not None: self.onto_aware_embedding_weights = self.initial_weights self.initial_weights = None # The following method will set self.trainable_weights super(OntoAwareEmbedding, self).build(input_shape) # input_shape will not be used by Embedding's build. if not self.tune_embedding: # Move embedding to non_trainable_weights self._non_trainable_weights.append(self._trainable_weights.pop()) if self.set_sense_priors: self._trainable_weights.append(self.sense_priors) if self.onto_aware_embedding_weights is not None: self.set_weights(self.onto_aware_embedding_weights)
def HAN1(MAX_NB_WORDS, MAX_WORDS, MAX_SENTS, EMBEDDING_DIM, WORDGRU, embedding_matrix, DROPOUTPER): #model = Sequential() wordInputs = Input(shape=(MAX_WORDS,), name='word1', dtype='float32') wordEmbedding = Embedding(MAX_NB_WORDS, EMBEDDING_DIM, weights=[embedding_matrix], mask_zero=True, trainable=True, name='emb1')(wordInputs) #Assuming all the sentences have same number of words. Check for input_length again. hij = Bidirectional(GRU(WORDGRU, name='gru1', return_sequences=True))(wordEmbedding) wordDrop = Dropout(DROPOUTPER, name='drop1')(hij) alpha_its, Si = AttentionLayer(name='att1')(wordDrop) v6 = Dense(1, activation="sigmoid", name="dense")(Si) #model.add(Dense(1, activation="sigmoid", name="documentOut3")) model = Model(inputs=[wordInputs] , outputs=[v6]) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return model
def fGRU_avg(MAX_NB_WORDS, MAX_WORDS, MAX_SENTS, EMBEDDING_DIM, WORDGRU, embedding_matrix, DROPOUTPER): wordInputs = Input(shape=(MAX_SENTS+1, MAX_WORDS), name="wordInputs", dtype='float32') wordInp = Flatten()(wordInputs) wordEmbedding = Embedding(MAX_NB_WORDS, EMBEDDING_DIM, weights=[embedding_matrix], mask_zero=False, trainable=True, name='wordEmbedding')(wordInp) hij = Bidirectional(GRU(WORDGRU, return_sequences=True), name='gru1')(wordEmbedding) head = GlobalAveragePooling1D()(hij) v6 = Dense(1, activation="sigmoid", name="dense")(head) model = Model(inputs=[wordInputs] , outputs=[v6]) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return model
def fGlove_avg(MAX_NB_WORDS, MAX_WORDS, MAX_SENTS, EMBEDDING_DIM, WORDGRU, embedding_matrix, DROPOUTPER): wordInputs = Input(shape=(MAX_SENTS+1, MAX_WORDS), name="wordInputs", dtype='float32') wordInp = Flatten()(wordInputs) wordEmbedding = Embedding(MAX_NB_WORDS, EMBEDDING_DIM, weights=[embedding_matrix], mask_zero=False, trainable=True, name='wordEmbedding')(wordInp) head = GlobalAveragePooling1D()(wordEmbedding) v6 = Dense(1, activation="sigmoid", name="dense")(head) model = Model(inputs=[wordInputs] , outputs=[v6]) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return model
def __init__(self, n_classes, vocab_size, max_len, num_units=128, useBiDirection=False, useAttention=False, learning_rate=0.001, dropout=0, embedding_size=300): self.model = Sequential() self.model.add(Embedding(input_dim=vocab_size, output_dim=embedding_size, input_length=max_len)) lstm_model = LSTM(num_units, dropout=dropout) if useBiDirection: lstm_model = Bidirectional(lstm_model) if useAttention: lstm_model = lstm_model print("Attention not implement yet ... ") self.model.add(lstm_model) self.model.add(Dense(n_classes, activation='softmax')) self.model.summary() self.model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=learning_rate), metrics=['accuracy'])
def create_BiLSTM(wordvecs, lstm_dim=300, output_dim=2, dropout=.5, weights=None, train=True): model = Sequential() if weights != None: model.add(Embedding(len(wordvecs)+1, len(wordvecs['the']), weights=[weights], trainable=train)) else: model.add(Embedding(len(wordvecs)+1, len(wordvecs['the']), trainable=train)) model.add(Dropout(dropout)) model.add(Bidirectional(LSTM(lstm_dim))) model.add(Dropout(dropout)) model.add(Dense(output_dim, activation='softmax')) if output_dim == 2: model.compile('adam', 'binary_crossentropy', metrics=['accuracy']) else: model.compile('adam', 'categorical_crossentropy', metrics=['accuracy']) return model
def reactionrnn_model(weights_path, num_classes, maxlen=140): ''' Builds the model architecture for textgenrnn and loads the pretrained weights for the model. ''' input = Input(shape=(maxlen,), name='input') embedded = Embedding(num_classes, 100, input_length=maxlen, name='embedding')(input) rnn = GRU(256, return_sequences=False, name='rnn')(embedded) output = Dense(5, name='output', activation=lambda x: K.relu(x) / K.sum(K.relu(x), axis=-1))(rnn) model = Model(inputs=[input], outputs=[output]) model.load_weights(weights_path, by_name=True) model.compile(loss='mse', optimizer='nadam') return model
def textgenrnn_model(weights_path, num_classes, maxlen=40): ''' Builds the model architecture for textgenrnn and loads the pretrained weights for the model. ''' input = Input(shape=(maxlen,), name='input') embedded = Embedding(num_classes, 100, input_length=maxlen, trainable=True, name='embedding')(input) rnn = LSTM(128, return_sequences=False, name='rnn')(embedded) output = Dense(num_classes, name='output', activation='softmax')(rnn) model = Model(inputs=[input], outputs=[output]) model.load_weights(weights_path, by_name=True) model.compile(loss='categorical_crossentropy', optimizer='nadam') return model
def build(self) -> None: """ ?????????? ??????. """ inp = Input(shape=(None,)) emb = Embedding(len(self.grapheme_alphabet), self.emb_dimension)(inp) encoded = Bidirectional(self.rnn(self.units1, return_sequences=True, recurrent_dropout=self.dropout))(emb) encoded = Dropout(self.dropout)(encoded) decoded = TimeDistributed(Dense(self.units2, activation="relu"))(encoded) predictions = TimeDistributed(Dense(len(self.phonetic_alphabet), activation="softmax"))(decoded) model = Model(inputs=inp, outputs=predictions) model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) self.model = model
def build(self) -> None: """ ?????????? ??????. """ inp = Input(shape=(None,)) emb = Embedding(len(self.grapheme_set), self.emb_dimension)(inp) encoded = Bidirectional(self.rnn(self.units, return_sequences=True, recurrent_dropout=self.dropout))(emb) encoded = Dropout(self.dropout)(encoded) decoded = TimeDistributed(Dense(self.units, activation="relu"))(encoded) predictions = TimeDistributed(Dense(3, activation="softmax"))(decoded) model = Model(inputs=inp, outputs=predictions) model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) self.model = model
def build(self) -> None: """ ?????????? ??????. """ inp = Input(shape=(None,)) emb = Embedding(len(self.phonetic_alphabet), self.emb_dimension)(inp) encoded = Bidirectional(self.rnn(self.units, return_sequences=True, recurrent_dropout=self.dropout))(emb) encoded = Dropout(self.dropout)(encoded) decoded = Bidirectional(self.rnn(self.units, return_sequences=True, recurrent_dropout=self.dropout))(encoded) decoded = Dropout(self.dropout)(decoded) predictions = TimeDistributed(Dense(3, activation="softmax"))(decoded) model = Model(inputs=inp, outputs=predictions) model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) self.model = model
def test_keras_export(self): tests = open(os.path.join(settings.BASE_DIR, 'tests', 'unit', 'keras_app', 'keras_export_test.json'), 'r') response = json.load(tests) tests.close() net = yaml.safe_load(json.dumps(response['net'])) net = {'l0': net['Input3'], 'l1': net['Embed']} net['l0']['connection']['output'].append('l1') # Test 1 inp = data(net['l0'], '', 'l0')['l0'] temp = embed(net['l1'], [inp], 'l1') model = Model(inp, temp['l1']) self.assertEqual(model.layers[1].__class__.__name__, 'Embedding') # Test 2 net['l1']['params']['input_length'] = None net['l1']['params']['weight_filler'] = 'VarianceScaling' inp = data(net['l0'], '', 'l0')['l0'] temp = embed(net['l1'], [inp], 'l1') model = Model(inp, temp['l1']) self.assertEqual(model.layers[1].__class__.__name__, 'Embedding') # ********** Merge Layers Test **********
def embed(layer, layer_in, layerId): out = {} if (layer['params']['weight_filler'] in fillerMap): embeddings_initializer = fillerMap[layer['params']['weight_filler']] else: embeddings_initializer = layer['params']['weight_filler'] embeddings_regularizer = regularizerMap[layer['params']['embeddings_regularizer']] embeddings_constraint = constraintMap[layer['params']['embeddings_constraint']] mask_zero = layer['params']['mask_zero'] if (layer['params']['input_length']): input_length = layer['params']['input_length'] else: input_length = None out[layerId] = Embedding(layer['params']['input_dim'], layer['params']['num_output'], embeddings_initializer=embeddings_initializer, embeddings_regularizer=embeddings_regularizer, embeddings_constraint=embeddings_constraint, mask_zero=mask_zero, input_length=input_length)(*layer_in) return out # ********** Merge Layers **********
def test_highway_layers(): n_highway_layers = 5 x = Input(shape=(8,), dtype="int32") v = Embedding(input_dim=2, output_dim=10)(x) v = Flatten()(v) assert hasattr(v, "_keras_shape") v = highway_layers(v, n_layers=n_highway_layers) output = Dense(1)(v) model = Model(inputs=[x], outputs=[output]) assert len(model.layers) > n_highway_layers * 3 x = np.array([ [1] + [0] * 7, [0] * 8, [0] * 7 + [1]]) y = np.array([0, 1, 0]) model.compile("rmsprop", "mse") model.fit(x, y, epochs=10) pred = model.predict(x) mean_diff = np.abs(pred - y).mean() assert mean_diff < 0.5, pred
def create_model(numNodes, factors): left_input = Input(shape=(1,)) right_input = Input(shape=(1,)) left_model = Sequential() left_model.add(Embedding(input_dim=numNodes + 1, output_dim=factors, input_length=1, mask_zero=False)) left_model.add(Reshape((factors,))) right_model = Sequential() right_model.add(Embedding(input_dim=numNodes + 1, output_dim=factors, input_length=1, mask_zero=False)) right_model.add(Reshape((factors,))) left_embed = left_model(left_input) right_embed = left_model(right_input) left_right_dot = merge([left_embed, right_embed], mode="dot", dot_axes=1, name="left_right_dot") model = Model(input=[left_input, right_input], output=[left_right_dot]) embed_generator = Model(input=[left_input, right_input], output=[left_embed, right_embed]) return model, embed_generator
def test_tiny_concat_seq_random(self): np.random.seed(1988) max_features = 10 embedding_dims = 4 seq_len = 5 num_channels = 6 # Define a model input_tensor = Input(shape = (seq_len, )) x1 = Embedding(max_features, embedding_dims)(input_tensor) x2 = Embedding(max_features, embedding_dims)(input_tensor) x3 = concatenate([x1, x2], axis=1) model = Model(inputs=[input_tensor], outputs=[x3]) # Set some random weights model.set_weights([np.random.rand(*w.shape) for w in model.get_weights()]) # Get the coreml model self._test_keras_model(model, one_dim_seq_flags=[True])
def test_tiny_image_captioning_feature_merge(self): img_input_1 = Input(shape=(16,16,3)) x = Conv2D(2,(3,3))(img_input_1) x = Flatten()(x) img_model = Model([img_input_1], [x]) img_input = Input(shape=(16,16,3)) x = img_model(img_input) x = Dense(8, name = 'cap_dense')(x) x = Reshape((1,8), name = 'cap_reshape')(x) sentence_input = Input(shape=(5,)) # max_length = 5 y = Embedding(8, 8, name = 'cap_embedding')(sentence_input) z = concatenate([x,y], axis = 1, name = 'cap_merge') combined_model = Model(inputs=[img_input, sentence_input], outputs=[z]) self._test_keras_model(combined_model, one_dim_seq_flags=[False, True])
def test_tiny_babi_rnn(self): vocab_size = 10 embed_hidden_size = 8 story_maxlen = 5 query_maxlen = 5 input_tensor_1 = Input(shape=(story_maxlen,)) x1 = Embedding(vocab_size, embed_hidden_size)(input_tensor_1) x1 = Dropout(0.3)(x1) input_tensor_2 = Input(shape=(query_maxlen,)) x2 = Embedding(vocab_size, embed_hidden_size)(input_tensor_2) x2 = Dropout(0.3)(x2) x2 = LSTM(embed_hidden_size, return_sequences=False)(x2) x2 = RepeatVector(story_maxlen)(x2) x3 = add([x1, x2]) x3 = LSTM(embed_hidden_size, return_sequences=False)(x3) x3 = Dropout(0.3)(x3) x3 = Dense(vocab_size, activation='softmax')(x3) model = Model(inputs=[input_tensor_1,input_tensor_2], outputs=[x3]) self._test_keras_model(model, one_dim_seq_flags=[True, True])
def test_merge_mask_3d(): from keras.layers import Input, merge, Embedding, SimpleRNN from keras.models import Model rand = lambda *shape: np.asarray(np.random.random(shape) > 0.5, dtype='int32') # embeddings input_a = Input(shape=(3,), dtype='int32') input_b = Input(shape=(3,), dtype='int32') embedding = Embedding(3, 4, mask_zero=True) embedding_a = embedding(input_a) embedding_b = embedding(input_b) # rnn rnn = SimpleRNN(3, return_sequences=True) rnn_a = rnn(embedding_a) rnn_b = rnn(embedding_b) # concatenation merged_concat = merge([rnn_a, rnn_b], mode='concat', concat_axis=-1) model = Model([input_a, input_b], [merged_concat]) model.compile(loss='mse', optimizer='sgd') model.fit([rand(2, 3), rand(2, 3)], [rand(2, 3, 6)])
def get_model_41(params): embedding_weights = pickle.load(open("../data/datasets/train_data/embedding_weights_w2v-google_MSD-AG.pk","rb")) # main sequential model model = Sequential() model.add(Embedding(len(embedding_weights[0]), params['embedding_dim'], input_length=params['sequence_length'], weights=embedding_weights)) #model.add(Dropout(params['dropout_prob'][0], input_shape=(params['sequence_length'], params['embedding_dim']))) model.add(LSTM(2048)) #model.add(Dropout(params['dropout_prob'][1])) model.add(Dense(output_dim=params["n_out"], init="uniform")) model.add(Activation(params['final_activation'])) logging.debug("Output CNN: %s" % str(model.output_shape)) if params['final_activation'] == 'linear': model.add(Lambda(lambda x :K.l2_normalize(x, axis=1))) return model # CRNN Arch for audio
def __init__(self, widths, vocab_size=5000): from keras.models import Sequential from keras.layers import Embedding, Dense, TimeDistributedMerge from keras.layers.advanced_activations import ELU from keras.preprocessing.sequence import pad_sequences from keras.optimizers import SGD self.n_classes = widths[-1] self.vocab_size = vocab_size self.word_to_int = {} self.int_to_word = np.ndarray(shape=(vocab_size+1,), dtype='int64') self.model = Sequential() self.model.add(Embedding(vocab_size, widths[0])) self.model.add(TimeDistributedMerge(mode='ave')) for width in widths[1:-1]: layer = Dense(output_dim=hidden_width, init='he_normal', activation=ELU(1.0)) self.model.add(layer) self.model.add( Dense( n_classes, init='zero', activation='softmax')) sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) self.model.compile(loss='categorical_crossentropy', optimizer=sgd)
def bag_of_convs_model(optimizer="adam",compile=True): main_input = Input(shape=(100,), dtype='int32', name='main_input') embedding = Embedding(output_dim=32, input_dim=100, input_length=100, dropout=0)(main_input) conv1 = getconvmodel(2,256)(embedding) conv2 = getconvmodel(3,256)(embedding) conv3 = getconvmodel(4,256)(embedding) conv4 = getconvmodel(5,256)(embedding) merged = merge([conv1,conv2,conv3,conv4],mode="concat") middle = Dense(1024,activation='relu')(merged) middle = Dropout(0.5)(middle) middle = Dense(1024,activation='relu')(middle) middle = Dropout(0.5)(middle) output = Dense(1,activation='sigmoid')(middle) model = Model(input=main_input,output=output) if compile: model.compile(loss='binary_crossentropy', optimizer=optimizer) return model
def subj_run(index_embedding, dataset, num_words=5000, embedding_len=100, max_len=50): (x_train, y_train), (x_test, y_test) = ds.load_data(dataset, num_words) x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) model = Sequential() model.add(Embedding(num_words, embedding_len, input_length=max_len, weights=[index_embedding])) model.add(LSTM(max_len, dropout=0.5, recurrent_dropout=0.5)) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) model.fit(x_train, y_train, epochs=4, batch_size=50, verbose=2) score, acc = model.evaluate(x_test, y_test, verbose=0) print('Test score:', score) print('Test accuracy:', acc)
def imdb_run(index_embedding, dataset, num_words=5000, embedding_len=100, max_len=500): (x_train, y_train), (x_test, y_test) = ds.load_data(dataset, num_words) x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) model = Sequential() model.add(Embedding(num_words, embedding_len, input_length=max_len, weights=[index_embedding])) model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2)) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) model.fit(x_train, y_train, epochs=3, batch_size=64, verbose=2) score, acc = model.evaluate(x_test, y_test, verbose=0) print('Test score:', score) print('Test accuracy:', acc)
def __init__(self, maxlen, d_L, d_C, d_D, V_C): """ maxlen = maximum input/output word size d_L = language model hidden state (= context vector) size d_C = character features (input embedding vector size) d_D = decoder hidden state h size V_C = character vocabulary """ # extend embeddings to treat zero values as zeros vectors (for y_0 = 0) # but don't do any masking class CharEmb(Embedding): def call(self, x, mask=None): y = super(CharEmb, self).call(x) return y * K.cast(K.expand_dims(x, -1), K.floatx()) c = Input(shape=(d_L,), name='c') y_tm1 = Input(shape=(maxlen,), name='y_tm1', dtype='int32') ye_tm1 = CharEmb(V_C.size + 1, d_C)(y_tm1) h = DecoderGRU(d_D, return_sequences=True)([ye_tm1, c]) s = Maxout(d_C)([h, ye_tm1, RepeatVector(maxlen)(c)]) s = Dropout(.2)(s) c_I = ProjectionOverTime(V_C.size)(s) super(W2C, self).__init__(input=[c, y_tm1], output=c_I, name='W2C')
def test_chain_crf(self): vocab_size = 20 n_classes = 11 model = Sequential() model.add(Embedding(vocab_size, n_classes)) layer = ChainCRF() model.add(layer) model.compile(loss=layer.loss, optimizer='sgd') # Train first mini batch batch_size, maxlen = 2, 2 x = np.random.randint(1, vocab_size, size=(batch_size, maxlen)) y = np.random.randint(n_classes, size=(batch_size, maxlen)) y = np.eye(n_classes)[y] model.train_on_batch(x, y) print(x) print(y)
def build_lstm(input_shape): model = Sequential() # model.add(Masking(input_shape=input_shape, mask_value=-1.)) model.add(Embedding(input_shape[0], 128, input_length=input_shape[1])) model.add(Convolution1D(nb_filter=64, filter_length=5, border_mode='valid', activation='relu', subsample_length=1)) model.add(MaxPooling1D(pool_length=4)) model.add(GRU(128)) # model.add(GRU(128, return_sequences=False)) # Add dropout if overfitting # model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) return model
def build_lstm(input_shape): model = Sequential() # model.add(Masking(input_shape=input_shape, mask_value=-1.)) model.add(Embedding(input_shape[0], 128, input_length=input_shape[1])) model.add(Convolution1D(nb_filter=64, filter_length=5, border_mode='valid', activation='relu', subsample_length=1)) model.add(MaxPooling1D(pool_length=model.output_shape[1])) model.add(Flatten()) model.add(Dense(128)) # model.add(GRU(128, return_sequences=False)) # Add dropout if overfitting # model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) return model
def lstm_train(X_train,y_train,vocab_size): X_train = sequence.pad_sequences(X_train, maxlen=MAX_LEN) main_input = Input(shape=(MAX_LEN,), dtype='int32') x = Embedding(output_dim=EMBED_SIZE, input_dim=vocab_size, input_length=MAX_LEN)(main_input) lstm_out = LSTM(HIDDEN_SIZE)(x) main_loss = Dense(1, activation='sigmoid', name='main_output')(lstm_out) model = Model(input=main_input, output=main_loss) model.compile(loss='binary_crossentropy', optimizer='rmsprop') model.fit(X_train, y_train, batch_size=BATCH_SIZE, nb_epoch=EPOCHS) return model
def _make_embedding_layer(self, word_index): embeddings = self._get_embeddings() nb_words = min(self.max_nr_words, len(word_index)) embedding_matrix = np.zeros((nb_words, self.embedding_dim)) for word, i in word_index.items(): if i >= self.max_nr_words: continue embedding_vector = embeddings.get(word) if embedding_vector is not None: embedding_matrix[i] = embedding_vector embedding_layer = Embedding(nb_words, self.embedding_dim, weights=[embedding_matrix], input_length=self.sequence_length, trainable=False) return embedding_layer
def train(self,data): print 'building model.....' self.prepare_data(data,re_train=True) inputs = Input(shape=(self.step,),dtype='int32') embed = Embedding(self.vocab_size,self.embedding_dims,input_length=self.step)(inputs) encode = LSTM(128)(embed) pred = Dense(self.vocab_size,activation='softmax')(encode) model = Model(input=inputs,output=pred) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) history = LossHistory() model.fit(self.X_data, self.y_data, batch_size=self.batch_size, nb_epoch=self.nb_epoch,callbacks=[history]) #self.avg_loss = loss.history['loss'] self.history = history with open('history','wb') as h: pickle.dump(history.losses,h) model_json = model.to_json() with open("model.json", "w") as json_file: json_file.write(model_json) # serialize weights to HDF5 model.save_weights("model.h5")
def build_cnn_char(input_dim, output_dim,nb_filter): clf = Sequential() clf.add(Embedding(input_dim, 32, # character embedding size input_length=maxlen, dropout=0.2)) clf.add(Convolution1D(nb_filter=nb_filter, filter_length=3,border_mode="valid",activation="relu",subsample_length=1)) clf.add(GlobalMaxPooling1D()) clf.add(Dense(100)) clf.add(Dropout(0.2)) clf.add(Activation("tanh")) clf.add(Dense(output_dim=output_dim, activation='softmax')) clf.compile(optimizer='adagrad', loss='categorical_crossentropy', metrics=['accuracy']) return clf # just one filter
def CNNWithKeywordLayer(embed_matrix, embed_input, sequence_length, keywords_length, filter_sizes, num_filters, dropout_prob, hidden_dims, model_variation, embedding_dim=300): ''' 2-way input model: left is cnn for sentence embedding while right is keywords ''' embed1 = Embedding(embed_input, embedding_dim,input_length=sequence_length, weights=[embed_matrix]) # 1. question model part question_branch = Sequential() cnn_model = TextCNN(sequence_length, embedding_dim, filter_sizes, num_filters) question_branch.add(embed1) question_branch.add(cnn_model) # 2. keyword model part #keyword_branch = KeywordLayer(keywords_length, embed_input, embedding_dim, embed_matrix) keyword_branch = LSTMLayer(embed_matrix, embed_input, keywords_length, dropout_prob, hidden_dims, embedding_dim) # 3. merge layer merged = Merge([question_branch, keyword_branch], mode='concat') final_model = Sequential() final_model.add(merged) final_model.add(Dense(hidden_dims, W_constraint = maxnorm(3))) final_model.add(Dropout(0.5)) final_model.add(Activation('relu')) final_model.add(Dense(1)) final_model.add(Activation('sigmoid')) #sgd = SGD(lr=0.01, momentum=0.9) final_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return final_model
def QuestionWithAnswersModel(embed_matrix, embed_input, sequence_length, ans_cnt, keywords_length, filter_sizes, num_filters, dropout_prob, hidden_dims, embedding_dim=300): ''' path1: question embedding (CNN model) path2: answer embeddin(Hierachical RNN model) merge ''' # path 1 embed1 = Embedding(embed_input, embedding_dim,input_length=sequence_length, weights=[embed_matrix]) question_branch = Sequential() cnn_model = TextCNN(sequence_length, embedding_dim, filter_sizes, num_filters) question_branch.add(embed1) question_branch.add(cnn_model) # path 2 answer_branch = HierarchicalRNN(embed_matrix, embed_input, ans_cnt, keywords_length, embedding_dim) merged = Merge([question_branch, answer_branch], mode='concat') final_model = Sequential() final_model.add(merged) final_model.add(Dense(hidden_dims, W_constraint = maxnorm(3))) final_model.add(Dropout(0.5)) final_model.add(Activation('relu')) final_model.add(Dense(1)) final_model.add(Activation('sigmoid')) final_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return final_model # vim: set expandtab ts=4 sw=4 sts=4 tw=100:
def generate_model(args, nb_features, input_length, nb_repeats=1): """ Generate the model. """ emb_weights = np.eye(nb_features) model = Sequential() model.add(Embedding(input_dim=nb_features, output_dim=nb_features, input_length=input_length, weights=[emb_weights], trainable=False)) for layer_id in range(args.input_layers): model.add(args.cell_type(args.hidden_layers, return_sequences=layer_id + 1 < args.input_layers)) model.add(Dropout(args.dropout)) model.add(RepeatVector(nb_repeats)) for _ in range(args.output_layers): model.add(args.cell_type(args.hidden_layers, return_sequences=True)) model.add(Dropout(args.dropout)) model.add(TimeDistributed(Dense(nb_features))) model.add(Activation("softmax")) model.compile(loss="sparse_categorical_crossentropy", optimizer=args.optimizer, metrics=["accuracy"]) return model
def _get_encoded_sentence_variables(self, sent1_input_layer, sent2_input_layer, dropout, embedding_file, tune_embedding): if embedding_file is None: if not tune_embedding: print >>sys.stderr, "Pretrained embedding is not given. Setting tune_embedding to True." tune_embedding = True embedding = None else: # Put the embedding in a list for Keras to treat it as initiali weights of the embeddign layer. embedding = [self.data_processor.get_embedding_matrix(embedding_file, onto_aware=False)] vocab_size = self.data_processor.get_vocab_size(onto_aware=False) embedding_layer = Embedding(input_dim=vocab_size, output_dim=self.embed_dim, weights=embedding, trainable=tune_embedding, mask_zero=True, name="embedding") embedded_sent1 = embedding_layer(sent1_input_layer) embedded_sent2 = embedding_layer(sent2_input_layer) if "embedding" in dropout: embedded_sent1 = Dropout(dropout["embedding"])(embedded_sent1) embedded_sent2 = Dropout(dropout["embedding"])(embedded_sent2) if self.shared_memory: encoder = MultipleMemoryAccessNSE(output_dim=self.embed_dim, return_mode="output_and_memory", name="encoder") mmanse_sent1_input = InputMemoryMerger(name="merge_sent1_input")([embedded_sent1, embedded_sent2]) encoded_sent1_and_memory = encoder(mmanse_sent1_input) encoded_sent1 = OutputSplitter("output", name="get_sent1_output")(encoded_sent1_and_memory) shared_memory = OutputSplitter("memory", name="get_shared_memory")(encoded_sent1_and_memory) mmanse_sent2_input = InputMemoryMerger(name="merge_sent2_input")([embedded_sent2, shared_memory]) encoded_sent2_and_memory = encoder(mmanse_sent2_input) encoded_sent2 = OutputSplitter("output", name="get_sent2_output")(encoded_sent2_and_memory) else: encoder = NSE(output_dim=self.embed_dim, name="encoder") encoded_sent1 = encoder(embedded_sent1) encoded_sent2 = encoder(embedded_sent2) if "encoder" in dropout: encoded_sent1 = Dropout(dropout["encoder"])(encoded_sent1) encoded_sent2 = Dropout(dropout["encoder"])(encoded_sent2) return encoded_sent1, encoded_sent2
def __init__(self, word_index_size, synset_index_size, embedding_dim, set_sense_priors=True, tune_embedding=True, **kwargs): self.embedding_dim = embedding_dim self.word_index_size = word_index_size self.synset_index_size = synset_index_size self.set_sense_priors = set_sense_priors # We have a separate "tune_embedding" field instead of using trainable because we have two sets of # parameters here: the embedding weights, and sense prior weights. We may want to fix only one of # them at a time. self.tune_embedding = tune_embedding # Convincing Embedding to return an embedding of the right shape. The output_dim of this layer is embedding_dim+1 kwargs['output_dim'] = self.embedding_dim kwargs['input_dim'] = self.synset_index_size self.onto_aware_embedding_weights = None super(OntoAwareEmbedding, self).__init__(**kwargs)
def call(self, x, mask=None): # Remove the word indices at the end before making a call to Embedding. x_synsets = x[:, :, :, :-1] # (num_samples, num_words, num_senses, num_hyps) # Taking the last index from the first sense. The last index in all the senses will be the same. x_word_index = x[:, :, 0, -1] # (num_samples, num_words) # (num_samples, num_words, num_senses, num_hyps, embedding_dim) synset_embedding = super(OntoAwareEmbedding, self).call(x_synsets, mask=None) # (num_samples, num_words, 1, 1) sense_prior_embedding = K.expand_dims(K.gather(self.sense_priors, x_word_index)) # Now tile sense_prior_embedding and concatenate it with synset_embedding. # (num_samples, num_words, num_senses, num_hyps, 1) tiled_sense_prior_embedding = K.expand_dims(K.tile(sense_prior_embedding, (1, 1, self.num_senses, self.num_hyps))) synset_embedding_with_priors = K.concatenate([synset_embedding, tiled_sense_prior_embedding]) return synset_embedding_with_priors
def image_caption_model(vocab_size=2500, embedding_matrix=None, lang_dim=100, max_caplen=28, img_dim=2048, clipnorm=1): print('generating vocab_history model v5') # text: current word lang_input = Input(shape=(1,)) img_input = Input(shape=(img_dim,)) seq_input = Input(shape=(max_caplen,)) vhist_input = Input(shape=(vocab_size,)) if embedding_matrix is not None: x = Embedding(output_dim=lang_dim, input_dim=vocab_size, init='glorot_uniform', input_length=1, weights=[embedding_matrix])(lang_input) else: x = Embedding(output_dim=lang_dim, input_dim=vocab_size, init='glorot_uniform', input_length=1)(lang_input) lang_embed = Reshape((lang_dim,))(x) lang_embed = merge([lang_embed, seq_input], mode='concat', concat_axis=-1) lang_embed = Dense(lang_dim)(lang_embed) lang_embed = Dropout(0.25)(lang_embed) merge_layer = merge([img_input, lang_embed, vhist_input], mode='concat', concat_axis=-1) merge_layer = Reshape((1, lang_dim+img_dim+vocab_size))(merge_layer) gru_1 = GRU(img_dim)(merge_layer) gru_1 = Dropout(0.25)(gru_1) gru_1 = Dense(img_dim)(gru_1) gru_1 = BatchNormalization()(gru_1) gru_1 = Activation('softmax')(gru_1) attention_1 = merge([img_input, gru_1], mode='mul', concat_axis=-1) attention_1 = merge([attention_1, lang_embed, vhist_input], mode='concat', concat_axis=-1) attention_1 = Reshape((1, lang_dim + img_dim + vocab_size))(attention_1) gru_2 = GRU(1024)(attention_1) gru_2 = Dropout(0.25)(gru_2) gru_2 = Dense(vocab_size)(gru_2) gru_2 = BatchNormalization()(gru_2) out = Activation('softmax')(gru_2) model = Model(input=[img_input, lang_input, seq_input, vhist_input], output=out) model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=0.0001, clipnorm=1.)) return model
def GRUf(MAX_NB_WORDS, MAX_WORDS, MAX_SENTS, EMBEDDING_DIM, WORDGRU, embedding_matrix, DROPOUTPER): wordInputs = Input(shape=(MAX_SENTS+1, MAX_WORDS), name="wordInputs", dtype='float32') wordInp = Flatten()(wordInputs) wordEmbedding = Embedding(MAX_NB_WORDS, EMBEDDING_DIM, weights=[embedding_matrix], mask_zero=False, trainable=True, name='wordEmbedding')(wordInp) hij = Bidirectional(GRU(WORDGRU, return_sequences=False), name='gru1')(wordEmbedding) v6 = Dense(1, activation="sigmoid", name="dense")(hij) model = Model(inputs=[wordInputs] , outputs=[v6]) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return model
def fhan2_avg(MAX_NB_WORDS, MAX_WORDS, MAX_SENTS, EMBEDDING_DIM, WORDGRU, embedding_matrix, DROPOUTPER): wordInputs = Input(shape=(MAX_WORDS,), name="wordInputs", dtype='float32') wordEmbedding = Embedding(MAX_NB_WORDS, EMBEDDING_DIM, weights=[embedding_matrix], mask_zero=False, trainable=True, name='wordEmbedding')(wordInputs) hij = Bidirectional(GRU(WORDGRU, return_sequences=True), name='gru1')(wordEmbedding) Si = GlobalAveragePooling1D()(hij) wordEncoder = Model(wordInputs, Si) # ----------------------------------------------------------------------------------------------- docInputs = Input(shape=(None, MAX_WORDS), name='docInputs' ,dtype='float32') #sentenceMasking = Masking(mask_value=0.0, name='sentenceMasking')(docInputs) sentEncoding = TimeDistributed(wordEncoder, name='sentEncoding')(docInputs) hi = Bidirectional(GRU(WORDGRU, return_sequences=True), merge_mode='concat', name='gru2')(sentEncoding) Vb = GlobalAveragePooling1D()(hi) v6 = Dense(1, activation="sigmoid", kernel_initializer = 'glorot_uniform', name="dense")(Vb) model = Model(inputs=[docInputs] , outputs=[v6]) sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) return model, wordEncoder
def han2(MAX_NB_WORDS, MAX_WORDS, MAX_SENTS, EMBEDDING_DIM, WORDGRU, embedding_matrix, DROPOUTPER): wordInputs = Input(shape=(MAX_WORDS,), name="wordInputs", dtype='float32') #print 'in han2 max-nb-words' #print MAX_NB_WORDS wordEmbedding = Embedding(MAX_NB_WORDS, EMBEDDING_DIM, weights=[embedding_matrix], mask_zero=True, trainable=True, name='wordEmbedding')(wordInputs) hij = Bidirectional(GRU(WORDGRU, return_sequences=True), name='gru1')(wordEmbedding) alpha_its, Si = AttentionLayer(name='att1')(hij) #wordDrop = Dropout(DROPOUTPER, name='wordDrop')(Si) wordEncoder = Model(wordInputs, Si) # ----------------------------------------------------------------------------------------------- docInputs = Input(shape=(None, MAX_WORDS), name='docInputs' ,dtype='float32') sentenceMasking = Masking(mask_value=0.0, name='sentenceMasking')(docInputs) sentEncoding = TimeDistributed(wordEncoder, name='sentEncoding')(sentenceMasking) hi = Bidirectional(GRU(WORDGRU, return_sequences=True), merge_mode='concat', name='gru2')(sentEncoding) alpha_s, Vb = AttentionLayer(name='att2')(hi) #sentDrop = Dropout(DROPOUTPER, name='sentDrop')(Vb) v6 = Dense(1, activation="sigmoid", kernel_initializer = 'he_normal', name="dense")(Vb) model = Model(inputs=[docInputs] , outputs=[v6]) sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) return model, wordEncoder
def LM(batch_size, window_size=3, vocsize=20000, embed_dim=20, hidden_dim=30, nb_layers=1): x = Input(batch_shape=(batch_size, None)) # mebedding y = Embedding(vocsize+2, embed_dim, mask_zero=False)(x) for i in range(nb_layers-1): y = GCNN(hidden_dim, window_size=window_size, name='gcnn{}'.format(i + 1))(y) y = GCNN(hidden_dim, window_size=window_size, name='gcnn{}'.format(nb_layers))(y) y = TimeDistributed(Dense(vocsize+2, activation='softmax', name='dense{}'.format(nb_layers)))(y) model = Model(inputs=x, outputs=y) return model
def LM(batch_size, vocsize=20000, embed_dim=20, hidden_dim=30, nb_layers=1): x = Input(batch_shape=(batch_size, None)) # mebedding y = Embedding(vocsize+2, embed_dim, mask_zero=False)(x) for i in range(nb_layers-1): y = LayerNormLSTM(hidden_dim, return_sequences=True, name='lnlstm{}'.format(i + 1))(y) y = LayerNormLSTM(hidden_dim, return_sequences=True, name='lnlstm{}'.format(nb_layers))(y) y = TimeDistributed(Dense(vocsize+2, activation='softmax', name='dense{}'.format(nb_layers)))(y) model = Model(inputs=x, outputs=y) return model
def LM(batch_size, vocsize=20000, embed_dim=20, hidden_dim=30, nb_layers=1): x = Input(batch_shape=(batch_size, None)) # mebedding y = Embedding(vocsize+2, embed_dim, mask_zero=False)(x) for i in range(nb_layers-1): y = WeightNormGRU(hidden_dim, return_sequences=True, name='wngru{}'.format(i + 1))(y) y = WeightNormGRU(hidden_dim, return_sequences=True, name='wngru{}'.format(nb_layers))(y) y = TimeDistributed(Dense(vocsize+2, activation='softmax', name='dense{}'.format(nb_layers)))(y) model = Model(input=x, output=y) return model