def build(self):
print('\nBuilding model...')
# create the model
embedding_vector_length = settings['EMBEDDING_VECTOR_LENGTH']
self.model = Sequential()
self.model.add(Embedding(self.top_words, embedding_vector_length, input_length=self.max_words_limit))
self.model.add(Convolution1D(nb_filter=settings['CNN_NO_OF_FILTER'], filter_length=settings['CNN_FILTER_LENGTH'], border_mode='same', activation='relu'))
self.model.add(MaxPooling1D(pool_length=settings['CNN_POOL_LENGTH']))
self.model.add(LSTM(settings['LSTM_CELLS_COUNT']))
self.model.add(Dropout(settings['DROPOUT']))
self.model.add(Dense(self.num_classes, activation='softmax'))
print(self.model.summary())
python类Convolution1D()的实例源码
model_zoo.py 文件源码
项目:visual_turing_test-tutorial
作者: mateuszmalinowski
项目源码
文件源码
阅读 25
收藏 0
点赞 0
评论 0
def create(self):
self.textual_embedding_fixed_length(self, mask_zero=False)
self.add(Convolution1D(
nb_filter=self._config.language_cnn_filters,
filter_length=self._config.language_cnn_filter_length,
border_mode='valid',
activation=self._config.language_cnn_activation,
subsample_length=1))
self.add(MaxPooling1D(pool_length=self._config.language_max_pool_length))
self.add(Flatten())
self.deep_mlp()
self.add(Dense(self._config.output_dim))
self.add(Activation('softmax'))
model_zoo.py 文件源码
项目:visual_turing_test-tutorial
作者: mateuszmalinowski
项目源码
文件源码
阅读 20
收藏 0
点赞 0
评论 0
def create(self):
assert self._config.merge_mode in ['max', 'ave', 'sum'], \
'Merge mode of this model is either max, ave or sum'
unigram = Sequential()
self.textual_embedding(unigram, mask_zero=True)
unigram.add(Convolution1D(
nb_filter=self._config.language_cnn_filters,
filter_length=1,
border_mode='valid',
activation=self._config.language_cnn_activation,
subsample_length=1))
self.temporal_pooling(unigram)
bigram = Sequential()
self.textual_embedding(bigram, mask_zero=True)
bigram.add(Convolution1D(
nb_filter=self._config.language_cnn_filters,
filter_length=2,
border_mode='valid',
activation=self._config.language_cnn_activation,
subsample_length=1))
self.temporal_pooling(bigram)
trigram = Sequential()
self.textual_embedding(trigram, mask_zero=True)
trigram.add(Convolution1D(
nb_filter=self._config.language_cnn_filters,
filter_length=3,
border_mode='valid',
activation=self._config.language_cnn_activation,
subsample_length=1))
self.temporal_pooling(trigram)
self.add(Merge([unigram, bigram, trigram], mode='concat'))
self.deep_mlp()
self.add(Dense(self._config.output_dim))
self.add(Activation('softmax'))
def generator_model(noise_dim=100, aux_dim=47, model_name="generator"):
# Merge noise and auxilary inputs
gen_input = Input(shape=(noise_dim,), name="noise_input")
aux_input = Input(shape=(aux_dim,), name="auxilary_input")
x = merge([gen_input, aux_input], mode="concat", concat_axis=-1)
# Dense Layer 1
x = Dense(10 * 100)(x)
x = BatchNormalization()(x)
x = LeakyReLU(0.2)(x) # output shape is 10*100
# Reshape the tensors to support CNNs
x = Reshape((100, 10))(x) # shape is 100 x 10
# Conv Layer 1
x = Convolution1D(nb_filter=250,
filter_length=13,
border_mode='same',
subsample_length=1)(x)
x = BatchNormalization()(x)
x = LeakyReLU(0.2)(x) # output shape is 100 x 250
x = UpSampling1D(length=2)(x) # output shape is 200 x 250
# Conv Layer 2
x = Convolution1D(nb_filter=100,
filter_length=13,
border_mode='same',
subsample_length=1)(x)
x = BatchNormalization()(x)
x = LeakyReLU(0.2)(x) # output shape is 200 x 100
x = UpSampling1D(length=2)(x) # output shape is 400 x 100
# Conv Layer 3
x = Convolution1D(nb_filter=1,
filter_length=13,
border_mode='same',
subsample_length=1)(x)
x = BatchNormalization()(x)
x = Activation('tanh')(x) # final output shape is 400 x 1
generator_model = Model(
input=[gen_input, aux_input], output=[x], name=model_name)
return generator_model
def discriminator_model(model_name="discriminator"):
disc_input = Input(shape=(400, 1), name="discriminator_input")
aux_input = Input(shape=(47,), name="auxilary_input")
# Conv Layer 1
x = Convolution1D(nb_filter=100,
filter_length=13,
border_mode='same',
subsample_length=1)(disc_input)
x = LeakyReLU(0.2)(x) # output shape is 100 x 400
x = AveragePooling1D(pool_length=20)(x) # ouput shape is 100 x 20
# Conv Layer 2
x = Convolution1D(nb_filter=250,
filter_length=13,
border_mode='same',
subsample_length=1)(x)
x = LeakyReLU(0.2)(x) # output shape is 250 x 20
x = AveragePooling1D(pool_length=5)(x) # output shape is 250 x 4
# Conv Layer 3
x = Convolution1D(nb_filter=300,
filter_length=13,
border_mode='same',
subsample_length=1)(x)
x = LeakyReLU(0.2)(x) # output shape is 300 x 4
x = Flatten()(x) # output shape is 1200
x = merge([x, aux_input], mode="concat", concat_axis=-1) # shape is 1247
# Dense Layer 1
x = Dense(200)(x)
x = LeakyReLU(0.2)(x) # output shape is 200
# Dense Layer 2
x = Dense(1)(x)
#x = Activation('sigmoid')(x)
x = Activation('linear')(x) # output shape is 1
discriminator_model = Model(
input=[disc_input, aux_input], output=[x], name=model_name)
return discriminator_model
def trainCNN(obj, dataset_headLines, dataset_body):
embedding_dim = 300
LSTM_neurons = 50
dense_neuron = 16
dimx = 100
dimy = 200
lamda = 0.0
nb_filter = 100
filter_length = 4
vocab_size = 10000
batch_size = 50
epochs = 5
ntn_out = 16
ntn_in = nb_filter
state = False
train_head,train_body,embedding_matrix = obj.process_data(sent_Q=dataset_headLines,
sent_A=dataset_body,dimx=dimx,dimy=dimy,
wordVec_model = wordVec_model)
inpx = Input(shape=(dimx,),dtype='int32',name='inpx')
#x = Embedding(output_dim=embedding_dim, input_dim=vocab_size, input_length=dimx)(inpx)
x = word2vec_embedding_layer(embedding_matrix)(inpx)
inpy = Input(shape=(dimy,),dtype='int32',name='inpy')
#y = Embedding(output_dim=embedding_dim, input_dim=vocab_size, input_length=dimy)(inpy)
y = word2vec_embedding_layer(embedding_matrix)(inpy)
ques = Convolution1D(nb_filter=nb_filter, filter_length=filter_length,
border_mode='valid', activation='relu',
subsample_length=1)(x)
ans = Convolution1D(nb_filter=nb_filter, filter_length=filter_length,
border_mode='valid', activation='relu',
subsample_length=1)(y)
#hx = Lambda(max_1d, output_shape=(nb_filter,))(ques)
#hy = Lambda(max_1d, output_shape=(nb_filter,))(ans)
hx = GlobalMaxPooling1D()(ques)
hy = GlobalMaxPooling1D()(ans)
#wordVec_model = []
#h = Merge(mode="concat",name='h')([hx,hy])
h1 = Multiply()([hx,hy])
h2 = Abs()([hx,hy])
h = Merge(mode="concat",name='h')([h1,h2])
#h = NeuralTensorLayer(output_dim=1,input_dim=ntn_in)([hx,hy])
#h = ntn_layer(ntn_in,ntn_out,activation=None)([hx,hy])
#score = h
wrap = Dense(dense_neuron, activation='relu',name='wrap')(h)
#score = Dense(1,activation='sigmoid',name='score')(h)
#wrap = Dense(dense_neuron,activation='relu',name='wrap')(h)
score = Dense(4,activation='softmax',name='score')(wrap)
#score=K.clip(score,1e-7,1.0-1e-7)
#corr = CorrelationRegularization(-lamda)([hx,hy])
#model = Model( [inpx,inpy],[score,corr])
model = Model( [inpx,inpy],score)
model.compile( loss='categorical_crossentropy',optimizer="adadelta",metrics=['accuracy'])
return model,train_head,train_body
def _generate_model(self, lembedding, num_classes=2, ngrams=[1,2,3,4,5],
nfilters=64, train_vectors=True):
def sub_ngram(n):
return Sequential([
Convolution1D(nfilters, n,
activation='relu',
input_shape=(lembedding.size, lembedding.vector_box.vector_dim)),
Lambda(
lambda x: K.max(x, axis=1),
output_shape=(nfilters,)
)
])
doc = Input(shape=(lembedding.size, ), dtype='int32')
embedded = Embedding(input_dim=lembedding.vector_box.size,
output_dim=lembedding.vector_box.vector_dim,
weights=[lembedding.vector_box.W])(doc)
embedded.trainable = train_vectors
rep = Dropout(0.5)(
merge(
[sub_ngram(n)(embedded) for n in ngrams],
mode='concat',
concat_axis=-1
)
)
if num_classes == 2:
out = Dense(1, activation='sigmoid')(rep)
model = Model(input=doc, output=out)
if self.optimizer is None:
self.optimizer = 'rmsprop'
model.compile(loss='binary_crossentropy', optimizer=self.optimizer, metrics=["accuracy"])
else:
out = Dense(num_classes, activation='softmax')(rep)
model = Model(input=doc, output=out)
if self.optimizer is None:
self.optimizer = 'adam'
model.compile(loss='categorical_crossentropy', optimizer=self.optimizer, metrics=["accuracy"])
return model
def model(sequence_length=None):
graph = Graph()
graph.add_input(name='input', input_shape=(sequence_length, embedding_dim))
for fsz in filter_sizes:
conv = Convolution1D(nb_filter=num_filters,
filter_length=fsz,
border_mode='valid',
activation='relu',
subsample_length=1,
input_dim=embedding_dim,
input_length=sequence_length)
pool = MaxPooling1D(pool_length=sequence_length - fsz + 1)
graph.add_node(conv, name='conv-%s' % fsz, input='input')
graph.add_node(pool, name='maxpool-%s' % fsz, input='conv-%s' % fsz)
graph.add_node(
Flatten(),
name='flatten-%s' %
fsz,
input='maxpool-%s' %
fsz)
if len(filter_sizes) > 1:
graph.add_output(name='output',
inputs=['flatten-%s' % fsz for fsz in filter_sizes],
merge_mode='concat')
else:
graph.add_output(name='output', input='flatten-%s' % filter_sizes[0])
# main sequential model
model = Sequential()
model.add(
Embedding(
vocab_size,
embedding_dim,
input_length=sequence_length,
weights=[embedding_weights]))
model.add(
Dropout(
dropout_prob[0],
input_shape=(
sequence_length,
embedding_dim)))
model.add(graph)
model.add(Dense(hidden_dims))
model.add(Dropout(dropout_prob[1]))
model.add(Activation('relu'))
return model
# Input Layer with all the query, similar and non similar documents.
def model(sequence_length=None):
graph = Graph()
graph.add_input(name='input', input_shape=(sequence_length, embedding_dim))
for fsz in filter_sizes:
conv = Convolution1D(nb_filter=num_filters,
filter_length=fsz,
border_mode='valid',
activation='relu',
subsample_length=1,
input_dim=embedding_dim,
input_length=sequence_length)
pool = MaxPooling1D(pool_length=sequence_length - fsz + 1)
graph.add_node(conv, name='conv-%s' % fsz, input='input')
graph.add_node(pool, name='maxpool-%s' % fsz, input='conv-%s' % fsz)
graph.add_node(
Flatten(),
name='flatten-%s' %
fsz,
input='maxpool-%s' %
fsz)
if len(filter_sizes) > 1:
graph.add_output(name='output',
inputs=['flatten-%s' % fsz for fsz in filter_sizes],
merge_mode='concat')
else:
graph.add_output(name='output', input='flatten-%s' % filter_sizes[0])
# main sequential model
model = Sequential()
if conf.feature_level == "word":
model.add(
Embedding(
vocab_size,
embedding_dim,
input_length=sequence_length,
weights=[embedding_weights]))
elif conf.feature_level == "char" or conf.feature_level == "ngram":
model.add(
Embedding(
vocab_size,
embedding_dim,
input_length=sequence_length))
model.add(
Dropout(
dropout_prob[0],
input_shape=(
sequence_length,
embedding_dim)))
model.add(graph)
model.add(Dense(hidden_dims))
# model.add(Dropout(dropout_prob[1]))
model.add(Activation('relu'))
return model
# Input Layer with all the query, similar and non similar documents.
def model(sequence_length=None):
graph = Graph()
graph.add_input(name='input', input_shape=(sequence_length, embedding_dim))
for fsz in filter_sizes:
conv = Convolution1D(nb_filter=num_filters,
filter_length=fsz,
border_mode='valid',
activation='relu',
subsample_length=1,
input_dim=embedding_dim,
input_length=sequence_length)
pool = MaxPooling1D(pool_length=sequence_length - fsz + 1)
graph.add_node(conv, name='conv-%s' % fsz, input='input')
graph.add_node(pool, name='maxpool-%s' % fsz, input='conv-%s' % fsz)
graph.add_node(
Flatten(),
name='flatten-%s' %
fsz,
input='maxpool-%s' %
fsz)
if len(filter_sizes) > 1:
graph.add_output(name='output',
inputs=['flatten-%s' % fsz for fsz in filter_sizes],
merge_mode='concat')
else:
graph.add_output(name='output', input='flatten-%s' % filter_sizes[0])
# main sequential model
model = Sequential()
model.add(
Embedding(
vocab_size,
embedding_dim,
input_length=sequence_length,
weights=[embedding_weights]))
model.add(
Dropout(
dropout_prob[0],
input_shape=(
sequence_length,
embedding_dim)))
model.add(graph)
model.add(Dense(hidden_dims))
# model.add(Dropout(dropout_prob[1]))
model.add(Activation('relu'))
return model
# Input Layer with all the query, similar and non similar documents.
def RNN(X_train,y_train,args):
"""
Purpose -> Define and train the proposed LSTM network
Input -> Data, Labels and model hyperparameters
Output -> Trained LSTM network
"""
#Sets the model hyperparameters
#Embedding hyperparameters
max_features = args[0]
maxlen = args[1]
embedding_size = args[2]
# Convolution hyperparameters
filter_length = args[3]
nb_filter = args[4]
pool_length = args[5]
# LSTM hyperparameters
lstm_output_size = args[6]
# Training hyperparameters
batch_size = args[7]
nb_epoch = args[8]
numclasses = args[9]
test_size = args[10]
#Format conversion for y_train for compatibility with Keras
y_train = np_utils.to_categorical(y_train, numclasses)
#Train & Validation data splitting
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=test_size, random_state=42)
#Build the sequential model
# Model Architecture is:
# Input -> Embedding -> Conv1D+Maxpool1D -> LSTM -> LSTM -> FC-1 -> Softmaxloss
print('Build model...')
model = Sequential()
model.add(Embedding(max_features, embedding_size, input_length=maxlen))
model.add(Convolution1D(nb_filter=nb_filter,
filter_length=filter_length,
border_mode='valid',
activation='relu',
subsample_length=1))
model.add(MaxPooling1D(pool_length=pool_length))
model.add(LSTM(lstm_output_size, dropout_W=0.2, dropout_U=0.2, return_sequences=True))
model.add(LSTM(lstm_output_size, dropout_W=0.2, dropout_U=0.2, return_sequences=False))
model.add(Dense(numclasses))
model.add(Activation('softmax'))
# Optimizer is Adamax along with categorical crossentropy loss
model.compile(loss='categorical_crossentropy',
optimizer='adamax',
metrics=['accuracy'])
print('Train...')
#Trains model for 50 epochs with shuffling after every epoch for training data and validates on validation data
model.fit(X_train, y_train,
batch_size=batch_size,
shuffle=True,
nb_epoch=nb_epoch,
validation_data=(X_valid, y_valid))
return model
def RNN(X_train,y_train,args):
"""
Purpose -> Define and train the proposed LSTM network
Input -> Data, Labels and model hyperparameters
Output -> Trained LSTM network
"""
#Sets the model hyperparameters
#Embedding hyperparameters
max_features = args[0]
maxlen = args[1]
embedding_size = args[2]
# Convolution hyperparameters
filter_length = args[3]
nb_filter = args[4]
pool_length = args[5]
# LSTM hyperparameters
lstm_output_size = args[6]
# Training hyperparameters
batch_size = args[7]
nb_epoch = args[8]
numclasses = args[9]
test_size = args[10]
#Format conversion for y_train for compatibility with Keras
y_train = np_utils.to_categorical(y_train, numclasses)
#Train & Validation data splitting
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=test_size, random_state=42)
#Build the sequential model
# Model Architecture is:
# Input -> Embedding -> Conv1D+Maxpool1D -> LSTM -> LSTM -> FC-1 -> Softmaxloss
print('Build model...')
model = Sequential()
model.add(Embedding(max_features, embedding_size, input_length=maxlen))
model.add(Convolution1D(nb_filter=nb_filter,
filter_length=filter_length,
border_mode='valid',
activation='relu',
subsample_length=1))
model.add(MaxPooling1D(pool_length=pool_length))
model.add(LSTM(lstm_output_size, dropout_W=0.2, dropout_U=0.2, return_sequences=True))
model.add(LSTM(lstm_output_size, dropout_W=0.2, dropout_U=0.2, return_sequences=False))
model.add(Dense(numclasses))
model.add(Activation('softmax'))
# Optimizer is Adamax along with categorical crossentropy loss
model.compile(loss='categorical_crossentropy',
optimizer='adamax',
metrics=['accuracy'])
print('Train...')
#Trains model for 50 epochs with shuffling after every epoch for training data and validates on validation data
model.fit(X_train, y_train,
batch_size=batch_size,
shuffle=True,
nb_epoch=nb_epoch,
validation_data=(X_valid, y_valid))
return model
def cnn_combine_train(X_train_list,y_train,vocab_size):
N=len(X_train_list)
X_train_list = [sequence.pad_sequences(x_train, maxlen=MAX_LEN) for x_train in X_train_list]
input_list=[]
out_list=[]
for i in range(N):
input,out=get_embedding_input_output('f%d' %i,vocab_size)
input_list.append(input)
out_list.append(out)
x = merge(out_list,mode='concat')
x = Dropout(0.25)(x)
# we add a Convolution1D, which will learn nb_filter
# word group filters of size filter_length:
x = Convolution1D(nb_filter=nb_filter,
filter_length=filter_length,
border_mode='valid',
activation='relu',
subsample_length=1)(x)
# we use standard max pooling (halving the output of the previous layer):
x = MaxPooling1D(pool_length=2)(x)
# We flatten the output of the conv layer,
# so that we can add a vanilla dense layer:
x = Flatten()(x)
# We add a vanilla hidden layer:
x = Dense(HIDDEN_SIZE)(x)
x = Dropout(0.25)(x)
x = Activation('relu')(x)
# We project onto a single unit output layer, and squash it with a sigmoid:
x = Dense(1)(x)
x = Activation('sigmoid')(x)
model = Model(input=input_list, output=x)
model.compile(loss='binary_crossentropy', optimizer='rmsprop')
model.fit(X_train_list, y_train, batch_size=BATCH_SIZE, nb_epoch=EPOCHS)
return model
def create_neural_network_rnn(self):
"""
Create the Neural Network Model
:return: Keras Modelh
"""
model = Sequential()
# we start off with an efficient embedding layer which maps
# our vocab indices into embedding_dims dimensions
model.add(Embedding(12, # Number of Features from State Space
300, # Vector Size
input_length=self.input_dim))
# we add a Convolution1D, which will learn nb_filter
# word group filters of size filter_length:
model.add(Convolution1D(nb_filter=self.nb_filter,
filter_length=self.filter_length,
border_mode='valid',
activation='relu',
subsample_length=1))
# we use standard max pooling (halving the output of the previous
# layer):
model.add(MaxPooling1D(pool_length=self.pool_length))
model.add(Dropout(self.dropout))
# We flatten the output of the conv layer,
# so that we can add a vanilla dense layer:
model.add(Flatten())
# We add a vanilla hidden layer:
model.add(Dense(self.neurons))
model.add(Dropout(self.dropout))
model.add(Activation('relu'))
# We project onto a single unit output layer, and squash it with a
# sigmoid:
model.add(Dense(len(self.actions)))
model.add(Activation('linear'))
model.compile(loss='mse',
optimizer=Adadelta(lr=0.00025))
print(model.summary())
return model