| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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")
- 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
-
|