A demo of the use of Sequential()

In order to construct a network layer by layer, we can use Sequential() which provides a much more intuitive manner


In [1]:
import cntk
from cntk.layers import Dense
from cntk.models import Sequential, LayerStack
import cntk.ops as C
from cntk.blocks import default_options
import numpy as np

In [2]:
with default_options(init=cntk.initializer.glorot_uniform()): # reset the default options for model_1
    model_1 = Sequential([
           Dense(1024, activation=C.relu), 
           Dense(9000, activation=C.softmax)])
model_2 = Sequential([
       LayerStack(6, lambda:Dense(2048, activation=C.sigmoid)),
       Dense(9000, activation=C.softmax)])

In [3]:
input_dim = 784
input = C.input_variable(input_dim, np.float32)
output_1 = model_1(input)
output_2 = model_2(input)

In [4]:
x = np.asarray(np.random.uniform(size=(input_dim, )), dtype=np.float32)
y = np.asarray(np.zeros((10, )), dtype=np.float32); y[4] = 1.
print (output_1.eval({input:x}))
print (output_2.eval({input:x}))


[[[  1.12926675e-04   1.07318403e-04   9.31393297e-05 ...,   1.51719083e-04
     1.13167524e-04   1.13797505e-04]]]
[[[  1.22095982e-04   1.29151187e-04   1.63233737e-04 ...,   1.03524813e-04
     1.32584755e-04   7.71947452e-05]]]

In [5]:
from cntk.layers import Embedding
emb = Embedding(10)(input)
y_emb = emb.eval({input:x})
print (y_emb)


[[[ 0.31710142 -0.71359128  0.42116967  0.26378796  0.2174373  -0.06734624
   -0.45698565 -0.30446228  0.85671723  0.43268046]]]

In [6]:
input = C.input_variable(2, np.float32)
layer_1 = Dense(3, activation=C.relu)(input)
print (layer_1.parameters[0].value)
print (layer_1.parameters[1].value)


[ 0.  0.  0.]
[[-1.09525657 -0.11630195 -0.41263551]
 [-0.99652326  0.78968358 -0.20035464]]

weight, bias in model

w.shape = [input_dim, output_dim]


In [25]:
input_dim = 10
hidden_dim = 20
output_dim = 30
input = C.input_variable(input_dim, np.float32)
mlp = Sequential([Dense(hidden_dim, activation=C.relu),
                  Dense(output_dim, activation=C.softmax)])(input)
print ([x.shape for x in mlp.parameters])


[(30,), (20, 30), (20,), (10, 20)]

In [ ]: