Python capsulelayers.CapsuleLayer() Examples
The following are 7
code examples of capsulelayers.CapsuleLayer().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
capsulelayers
, or try the search function
.
Example #1
Source File: textcaps_emnist_bal.py From textcaps with MIT License | 5 votes |
def CapsNet(input_shape, n_class, routings): """ Defining the CapsNet :param input_shape: data shape, 3d, [width, height, channels] :param n_class: number of classes :param routings: number of routing iterations :return: Two Keras Models, the first one used for training, and the second one for evaluation. """ x = layers.Input(shape=input_shape) conv1 = layers.Conv2D(filters=64, kernel_size=3, strides=1, padding='valid', activation='relu', name='conv1')(x) conv2 = layers.Conv2D(filters=128, kernel_size=3, strides=1, padding='valid', activation='relu', name='conv2')(conv1) conv3 = layers.Conv2D(filters=256, kernel_size=3, strides=2, padding='valid', activation='relu', name='conv3')(conv2) primarycaps = PrimaryCap(conv3, dim_capsule=8, n_channels=32, kernel_size=9, strides=2, padding='valid') digitcaps = CapsuleLayer(num_capsule=n_class, dim_capsule=16, routings=routings,channels=32,name='digitcaps')(primarycaps) out_caps = Length(name='capsnet')(digitcaps) """ Decoder Network """ y = layers.Input(shape=(n_class,)) masked_by_y = Mask()([digitcaps, y]) masked = Mask()(digitcaps) decoder = models.Sequential(name='decoder') decoder.add(Dense(input_dim=16*n_class, activation="relu", output_dim=7*7*32)) decoder.add(Reshape((7, 7, 32))) decoder.add(BatchNormalization(momentum=0.8)) decoder.add(layers.Deconvolution2D(32, 3, 3,subsample=(1, 1),border_mode='same', activation="relu")) decoder.add(layers.Deconvolution2D(16, 3, 3,subsample=(2, 2),border_mode='same', activation="relu")) decoder.add(layers.Deconvolution2D(8, 3, 3,subsample=(2, 2),border_mode='same', activation="relu")) decoder.add(layers.Deconvolution2D(4, 3, 3,subsample=(1, 1),border_mode='same', activation="relu")) decoder.add(layers.Deconvolution2D(1, 3, 3,subsample=(1, 1),border_mode='same', activation="sigmoid")) decoder.add(layers.Reshape(target_shape=input_shape, name='out_recon')) """ Models for training and evaluation (prediction) """ train_model = models.Model([x, y], [out_caps, decoder(masked_by_y)]) eval_model = models.Model(x, [out_caps, decoder(masked)]) return train_model, eval_model
Example #2
Source File: capsulenet.py From CapsNet-Fashion-MNIST with MIT License | 5 votes |
def CapsNet(input_shape, n_class, num_routing): """ A Capsule Network on MNIST. :param input_shape: data shape, 3d, [width, height, channels] :param n_class: number of classes :param num_routing: number of routing iterations :return: Two Keras Models, the first one used for training, and the second one for evaluation. `eval_model` can also be used for training. """ x = layers.Input(shape=input_shape) # Layer 1: Just a conventional Conv2D layer conv1 = layers.Conv2D(filters=256, kernel_size=9, strides=1, padding='valid', activation='relu', name='conv1')(x) # Layer 2: Conv2D layer with `squash` activation, then reshape to [None, num_capsule, dim_capsule] primarycaps = PrimaryCap(conv1, dim_capsule=8, n_channels=32, kernel_size=9, strides=2, padding='valid') # Layer 3: Capsule layer. Routing algorithm works here. digitcaps = CapsuleLayer(num_capsule=n_class, dim_capsule=16, num_routing=num_routing, name='digitcaps')(primarycaps) # Layer 4: This is an auxiliary layer to replace each capsule with its length. Just to match the true label's shape. # If using tensorflow, this will not be necessary. :) out_caps = Length(name='capsnet')(digitcaps) # Decoder network. y = layers.Input(shape=(n_class,)) masked_by_y = Mask()([digitcaps, y]) # The true label is used to mask the output of capsule layer. For training masked = Mask()(digitcaps) # Mask using the capsule with maximal length. For prediction # Shared Decoder model in training and prediction decoder = models.Sequential(name='decoder') decoder.add(layers.Dense(512, activation='relu', input_dim=16*n_class)) decoder.add(layers.Dense(1024, activation='relu')) decoder.add(layers.Dense(np.prod(input_shape), activation='sigmoid')) decoder.add(layers.Reshape(target_shape=input_shape, name='out_recon')) # Models for training and evaluation (prediction) train_model = models.Model([x, y], [out_caps, decoder(masked_by_y)]) eval_model = models.Model(x, [out_caps, decoder(masked)]) return train_model, eval_model
Example #3
Source File: capsulenet.py From dynamic-training-with-apache-mxnet-on-aws with Apache License 2.0 | 4 votes |
def capsnet(batch_size, n_class, num_routing,recon_loss_weight): # data.shape = [batch_size, 1, 28, 28] data = mx.sym.Variable('data') input_shape = (1, 28, 28) # Conv2D layer # net.shape = [batch_size, 256, 20, 20] conv1 = mx.sym.Convolution(data=data, num_filter=256, kernel=(9, 9), layout='NCHW', name='conv1') conv1 = mx.sym.Activation(data=conv1, act_type='relu', name='conv1_act') # net.shape = [batch_size, 256, 6, 6] primarycaps = primary_caps(data=conv1, dim_vector=8, n_channels=32, kernel=(9, 9), strides=[2, 2], name='primarycaps') primarycaps.infer_shape(data=(batch_size, 1, 28, 28)) # CapsuleLayer kernel_initializer = mx.init.Xavier(rnd_type='uniform', factor_type='avg', magnitude=3) bias_initializer = mx.init.Zero() digitcaps = CapsuleLayer(num_capsule=10, dim_vector=16, batch_size=batch_size, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, num_routing=num_routing)(primarycaps) # out_caps : (batch_size, 10) out_caps = mx.sym.sqrt(data=mx.sym.sum(mx.sym.square(digitcaps), 2)) out_caps.infer_shape(data=(batch_size, 1, 28, 28)) y = mx.sym.Variable('softmax_label', shape=(batch_size,)) y_onehot = mx.sym.one_hot(y, n_class) y_reshaped = mx.sym.Reshape(data=y_onehot, shape=(batch_size, -4, n_class, -1)) y_reshaped.infer_shape(softmax_label=(batch_size,)) # inputs_masked : (batch_size, 16) inputs_masked = mx.sym.linalg_gemm2(y_reshaped, digitcaps, transpose_a=True) inputs_masked = mx.sym.Reshape(data=inputs_masked, shape=(-3, 0)) x_recon = mx.sym.FullyConnected(data=inputs_masked, num_hidden=512, name='x_recon') x_recon = mx.sym.Activation(data=x_recon, act_type='relu', name='x_recon_act') x_recon = mx.sym.FullyConnected(data=x_recon, num_hidden=1024, name='x_recon2') x_recon = mx.sym.Activation(data=x_recon, act_type='relu', name='x_recon_act2') x_recon = mx.sym.FullyConnected(data=x_recon, num_hidden=np.prod(input_shape), name='x_recon3') x_recon = mx.sym.Activation(data=x_recon, act_type='sigmoid', name='x_recon_act3') data_flatten = mx.sym.flatten(data=data) squared_error = mx.sym.square(x_recon-data_flatten) recon_error = mx.sym.mean(squared_error) recon_error_stopped = recon_error recon_error_stopped = mx.sym.BlockGrad(recon_error_stopped) loss = mx.symbol.MakeLoss((1-recon_loss_weight)*margin_loss(y_onehot, out_caps)+recon_loss_weight*recon_error) out_caps_blocked = out_caps out_caps_blocked = mx.sym.BlockGrad(out_caps_blocked) return mx.sym.Group([out_caps_blocked, loss, recon_error_stopped])
Example #4
Source File: capsulenet.py From training_results_v0.6 with Apache License 2.0 | 4 votes |
def capsnet(batch_size, n_class, num_routing,recon_loss_weight): # data.shape = [batch_size, 1, 28, 28] data = mx.sym.Variable('data') input_shape = (1, 28, 28) # Conv2D layer # net.shape = [batch_size, 256, 20, 20] conv1 = mx.sym.Convolution(data=data, num_filter=256, kernel=(9, 9), layout='NCHW', name='conv1') conv1 = mx.sym.Activation(data=conv1, act_type='relu', name='conv1_act') # net.shape = [batch_size, 256, 6, 6] primarycaps = primary_caps(data=conv1, dim_vector=8, n_channels=32, kernel=(9, 9), strides=[2, 2], name='primarycaps') primarycaps.infer_shape(data=(batch_size, 1, 28, 28)) # CapsuleLayer kernel_initializer = mx.init.Xavier(rnd_type='uniform', factor_type='avg', magnitude=3) bias_initializer = mx.init.Zero() digitcaps = CapsuleLayer(num_capsule=10, dim_vector=16, batch_size=batch_size, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, num_routing=num_routing)(primarycaps) # out_caps : (batch_size, 10) out_caps = mx.sym.sqrt(data=mx.sym.sum(mx.sym.square(digitcaps), 2)) out_caps.infer_shape(data=(batch_size, 1, 28, 28)) y = mx.sym.Variable('softmax_label', shape=(batch_size,)) y_onehot = mx.sym.one_hot(y, n_class) y_reshaped = mx.sym.Reshape(data=y_onehot, shape=(batch_size, -4, n_class, -1)) y_reshaped.infer_shape(softmax_label=(batch_size,)) # inputs_masked : (batch_size, 16) inputs_masked = mx.sym.linalg_gemm2(y_reshaped, digitcaps, transpose_a=True) inputs_masked = mx.sym.Reshape(data=inputs_masked, shape=(-3, 0)) x_recon = mx.sym.FullyConnected(data=inputs_masked, num_hidden=512, name='x_recon') x_recon = mx.sym.Activation(data=x_recon, act_type='relu', name='x_recon_act') x_recon = mx.sym.FullyConnected(data=x_recon, num_hidden=1024, name='x_recon2') x_recon = mx.sym.Activation(data=x_recon, act_type='relu', name='x_recon_act2') x_recon = mx.sym.FullyConnected(data=x_recon, num_hidden=np.prod(input_shape), name='x_recon3') x_recon = mx.sym.Activation(data=x_recon, act_type='sigmoid', name='x_recon_act3') data_flatten = mx.sym.flatten(data=data) squared_error = mx.sym.square(x_recon-data_flatten) recon_error = mx.sym.mean(squared_error) recon_error_stopped = recon_error recon_error_stopped = mx.sym.BlockGrad(recon_error_stopped) loss = mx.symbol.MakeLoss((1-recon_loss_weight)*margin_loss(y_onehot, out_caps)+recon_loss_weight*recon_error) out_caps_blocked = out_caps out_caps_blocked = mx.sym.BlockGrad(out_caps_blocked) return mx.sym.Group([out_caps_blocked, loss, recon_error_stopped])
Example #5
Source File: dcnet.py From Multi-level-DCNet with GNU General Public License v3.0 | 4 votes |
def MultiLevelDCNet(input_shape, n_class, routings): """ A DCNet (1-level DCNet) on MNIST. :param input_shape: data shape, 3d, [width, height, channels] :param n_class: number of classes :param routings: number of routing iterations :return: Two Keras Models, the first one used for training, and the second one for evaluation. """ x = layers.Input(shape=input_shape) concat_axis = 1 if K.image_data_format() == 'channels_first' else -1 ########################### Primary Capsules ########################### # Incorporating DenseNets - Creating a dense block with 8 layers having 32 filters and 32 growth rate. conv, nb_filter = densenet.DenseBlock(x, growth_rate=32, nb_layers=8, nb_filter=32) # Batch Normalization DenseBlockOutput = BatchNormalization(axis=concat_axis, epsilon=1.1e-5)(conv) # Creating Primary Capsules # Here PrimaryCapsConv2D is the Conv2D output which is used as the primary capsules by reshaping and squashing (squash activation). # primarycaps_1 (size: [None, num_capsule, dim_capsule]) is the "reshaped and sqashed output" which will be further passed to the dynamic routing protocol. primarycaps, PrimaryCapsConv2D = PrimaryCap(DenseBlockOutput, dim_capsule=8, n_channels=32, kernel_size=9, strides=2, padding='valid') ########################### DigitCaps Output ########################### digitcaps = CapsuleLayer(num_capsule=n_class, dim_capsule=16, routings=routings, name='digitcaps0')(primarycaps) out_caps = Length(name='capsnet')(digitcaps) # Reconstruction (decoder) network y = layers.Input(shape=(n_class,)) masked_by_y = Mask()([digitcaps, y]) # The true label is used to mask the output of capsule layer. For training masked = Mask()(digitcaps) # Mask using the capsule with maximal length. For prediction # Shared Decoder model in training and prediction decoder = models.Sequential(name='decoder') decoder.add(layers.Dense(512, activation='relu', input_dim=int(digitcaps.shape[2]*n_class), name='zero_layer')) decoder.add(layers.Dense(512, activation='relu', name='one_layer')) decoderFinal = models.Sequential(name='decoderFinal') # Concatenating two layers decoderFinal.add(layers.Merge([decoder.get_layer('zero_layer'), decoder.get_layer('one_layer')], mode='concat')) decoderFinal.add(layers.Dense(1024, activation='relu')) decoderFinal.add(layers.Dense(np.prod(input_shape), activation='sigmoid')) decoderFinal.add(layers.Reshape(input_shape, name='out_recon')) # Model for training train_model = models.Model([x, y], [out_caps, decoderFinal(masked_by_y)]) # Model for evaluation (prediction) eval_model = models.Model(x, [out_caps, decoderFinal(masked)]) return train_model, eval_model
Example #6
Source File: capsulenet.py From CapsNet-Keras with MIT License | 4 votes |
def CapsNet(input_shape, n_class, routings): """ A Capsule Network on MNIST. :param input_shape: data shape, 3d, [width, height, channels] :param n_class: number of classes :param routings: number of routing iterations :return: Two Keras Models, the first one used for training, and the second one for evaluation. `eval_model` can also be used for training. """ x = layers.Input(shape=input_shape) # Layer 1: Just a conventional Conv2D layer conv1 = layers.Conv2D(filters=256, kernel_size=9, strides=1, padding='valid', activation='relu', name='conv1')(x) # Layer 2: Conv2D layer with `squash` activation, then reshape to [None, num_capsule, dim_capsule] primarycaps = PrimaryCap(conv1, dim_capsule=8, n_channels=32, kernel_size=9, strides=2, padding='valid') # Layer 3: Capsule layer. Routing algorithm works here. digitcaps = CapsuleLayer(num_capsule=n_class, dim_capsule=16, routings=routings, name='digitcaps')(primarycaps) # Layer 4: This is an auxiliary layer to replace each capsule with its length. Just to match the true label's shape. # If using tensorflow, this will not be necessary. :) out_caps = Length(name='capsnet')(digitcaps) # Decoder network. y = layers.Input(shape=(n_class,)) masked_by_y = Mask()([digitcaps, y]) # The true label is used to mask the output of capsule layer. For training masked = Mask()(digitcaps) # Mask using the capsule with maximal length. For prediction # Shared Decoder model in training and prediction decoder = models.Sequential(name='decoder') decoder.add(layers.Dense(512, activation='relu', input_dim=16*n_class)) decoder.add(layers.Dense(1024, activation='relu')) decoder.add(layers.Dense(np.prod(input_shape), activation='sigmoid')) decoder.add(layers.Reshape(target_shape=input_shape, name='out_recon')) # Models for training and evaluation (prediction) train_model = models.Model([x, y], [out_caps, decoder(masked_by_y)]) eval_model = models.Model(x, [out_caps, decoder(masked)]) # manipulate model noise = layers.Input(shape=(n_class, 16)) noised_digitcaps = layers.Add()([digitcaps, noise]) masked_noised_y = Mask()([noised_digitcaps, y]) manipulate_model = models.Model([x, y, noise], decoder(masked_noised_y)) return train_model, eval_model, manipulate_model
Example #7
Source File: capsulenet.py From SNIPER-mxnet with Apache License 2.0 | 4 votes |
def capsnet(batch_size, n_class, num_routing,recon_loss_weight): # data.shape = [batch_size, 1, 28, 28] data = mx.sym.Variable('data') input_shape = (1, 28, 28) # Conv2D layer # net.shape = [batch_size, 256, 20, 20] conv1 = mx.sym.Convolution(data=data, num_filter=256, kernel=(9, 9), layout='NCHW', name='conv1') conv1 = mx.sym.Activation(data=conv1, act_type='relu', name='conv1_act') # net.shape = [batch_size, 256, 6, 6] primarycaps = primary_caps(data=conv1, dim_vector=8, n_channels=32, kernel=(9, 9), strides=[2, 2], name='primarycaps') primarycaps.infer_shape(data=(batch_size, 1, 28, 28)) # CapsuleLayer kernel_initializer = mx.init.Xavier(rnd_type='uniform', factor_type='avg', magnitude=3) bias_initializer = mx.init.Zero() digitcaps = CapsuleLayer(num_capsule=10, dim_vector=16, batch_size=batch_size, kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, num_routing=num_routing)(primarycaps) # out_caps : (batch_size, 10) out_caps = mx.sym.sqrt(data=mx.sym.sum(mx.sym.square(digitcaps), 2)) out_caps.infer_shape(data=(batch_size, 1, 28, 28)) y = mx.sym.Variable('softmax_label', shape=(batch_size,)) y_onehot = mx.sym.one_hot(y, n_class) y_reshaped = mx.sym.Reshape(data=y_onehot, shape=(batch_size, -4, n_class, -1)) y_reshaped.infer_shape(softmax_label=(batch_size,)) # inputs_masked : (batch_size, 16) inputs_masked = mx.sym.linalg_gemm2(y_reshaped, digitcaps, transpose_a=True) inputs_masked = mx.sym.Reshape(data=inputs_masked, shape=(-3, 0)) x_recon = mx.sym.FullyConnected(data=inputs_masked, num_hidden=512, name='x_recon') x_recon = mx.sym.Activation(data=x_recon, act_type='relu', name='x_recon_act') x_recon = mx.sym.FullyConnected(data=x_recon, num_hidden=1024, name='x_recon2') x_recon = mx.sym.Activation(data=x_recon, act_type='relu', name='x_recon_act2') x_recon = mx.sym.FullyConnected(data=x_recon, num_hidden=np.prod(input_shape), name='x_recon3') x_recon = mx.sym.Activation(data=x_recon, act_type='sigmoid', name='x_recon_act3') data_flatten = mx.sym.flatten(data=data) squared_error = mx.sym.square(x_recon-data_flatten) recon_error = mx.sym.mean(squared_error) recon_error_stopped = recon_error recon_error_stopped = mx.sym.BlockGrad(recon_error_stopped) loss = mx.symbol.MakeLoss((1-recon_loss_weight)*margin_loss(y_onehot, out_caps)+recon_loss_weight*recon_error) out_caps_blocked = out_caps out_caps_blocked = mx.sym.BlockGrad(out_caps_blocked) return mx.sym.Group([out_caps_blocked, loss, recon_error_stopped])