karnakgp / Karna

ML/DL meeting group at IIT Kharagpur
47 stars 20 forks source link

A Convolutional Neural Network for Modelling Sentences #2

Closed nishnik closed 6 years ago

nishnik commented 6 years ago

Paper

Assigned to @rajasekharmekala

nishnik commented 6 years ago

@rajasekharmekala

from keras.engine import Layer, InputSpec
from keras.layers import Flatten
import tensorflow as tf

class KMaxPooling(Layer):
    """
    K-max pooling layer that extracts the k-highest activations from a sequence (2nd dimension).
    TensorFlow backend.
    """
    def __init__(self, k=1, **kwargs):
        super().__init__(**kwargs)
        self.input_spec = InputSpec(ndim=3)
        self.k = k

    def compute_output_shape(self, input_shape):
        return (input_shape[0], (input_shape[2] * self.k))

    def call(self, inputs):

        # swap last two dimensions since top_k will be applied along the last dimension
        shifted_input = tf.transpose(inputs, [0, 2, 1])

        # extract top_k, returns two tensors [values, indices]
        top_k = tf.nn.top_k(shifted_input, k=self.k, sorted=True, name=None)[0]

        # return flattened output
        return Flatten()(top_k)

Copied from https://github.com/keras-team/keras/issues/373

manan15105411262 commented 6 years ago

how to use the KMaxPooling,for example: conv1 = Conv2D(32, (3, 3), activation="relu", padding="same")(conv1) pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) KMaxPooling replace MaxPooling2D??