import tensorflow as tf import numpy as np class CNNtextual(object): def __init__(self, embedding_matrix, sequence_length, vocab_size, embedding_size, filter_sizes, num_filters): # Placeholders for input, dropout self.input_text = tf.placeholder(tf.int32, [None, sequence_length], name="input_text") self.keep_prob = tf.placeholder(tf.float32, name="keep_prob") # embedding layer with tf.name_scope("embedding"): self.embed_input = tf.nn.embedding_lookup(embedding_matrix, self.input_x) self.embed_input_expanded = tf.expand_dims(self.embed_input, -1) # conv and maxpool layer for each size pooled_ouputs = [] for i, filter_size in enumerate(filter_sizes): with tf.name_scope("conv-maxpool-{}".format(str(filter_size))): # Conv layer filter_shape = [filter_size, embedding_size, 1, num_filters] W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W") b = tf.Variable(tf.constant(0.1, shape=[num_filters]), name="b") conv = tf.nn.conv2d(self.embed_input_expanded, W, strides=[1,1,1,1], padding="VALID", name="conv") # relu h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu") # max-pooling over outputs pooled = tf.nn.max_pool(h, ksize=[1, sequence_length-filter_size + 1, 1, 1], padding="VALID", name="pool") pooled_outputs.append(pooled) # Combine all pooled features num_filters_total = num_filters*len(filter_sizes) self.hpool = tf.concat(3, pooled_outputs) self.hpool_flat = tf.reshape(self.hpool, [-1, num_filters_total]) # dropout with tf.name_scope("dropout"): self.h_drop = tf.nn.dropout(self.h_pool_flat, self.keep_prob) # TODO Recurrent layer with sess as tf.Session():