Beispiel #1
0
    def __init__(self, input_size, output_size, hidden_layer_sizes):

        self.learning_rate = 0.1

        self.input_layer = InputLayer(input_size)
        self.output_layer = OutputLayer(output_size)
        self.hidden_layers = [
            HiddenLayer(hidden_layer_size)
            for hidden_layer_size in hidden_layer_sizes
        ]

        for i, hidden_layer in enumerate(self.hidden_layers):
            if i == 0 and i == len(self.hidden_layers) - 1:
                hidden_layer.initialize(self.input_layer, self.output_layer)
            elif i == 0:
                hidden_layer.initialize(self.input_layer,
                                        self.hidden_layers[i + 1])
            elif i == len(self.hidden_layers) - 1:
                hidden_layer.initialize(self.hidden_layers[i - 1],
                                        self.output_layer)
            else:
                hidden_layer.initialize(self.hidden_layers[i - 1],
                                        self.hidden_layers[i + 1])

        if (len(self.hidden_layers)):
            self.output_layer.initialize(self.hidden_layers[-1])
        else:
            self.output_layer.initialize(self.input_layer)
def main():

  print("{}; lr: {}; layer size: {}".format(conf["layer_name"],
                                            conf["learning_rate"],
                                            conf["num_classes"]))

  output_layer = OutputLayer(conf["layer_name"],
                             conf["lower_layer"],
                             conf["lower_layer_size"],
                             conf["num_classes"],
                             conf["learning_rate"])
  # init weights
  output_layer.init_weights(None)

  MAX_MESSAGE_LENGTH = 128 * 1024 *1024
  server = grpc.server(futures.ThreadPoolExecutor(max_workers=4), options=
                       [('grpc.max_send_message_length', MAX_MESSAGE_LENGTH),
                        ('grpc.max_receive_message_length', MAX_MESSAGE_LENGTH)])
  nn_pb2_grpc.add_LayerDataExchangeServicer_to_server(output_layer,
                                                      server)
  server.add_insecure_port(conf["listen_on"])
  server.start()

  # idle
  try:
    while True:
      time.sleep(24*60*60)
  except KeyboardInterrupt:
    server.stop(0)
Beispiel #3
0
class FeedForwardNeuralNetwork:
    def __init__(self, input_size, output_size, hidden_layer_sizes):

        self.learning_rate = 0.1

        self.input_layer = InputLayer(input_size)
        self.output_layer = OutputLayer(output_size)
        self.hidden_layers = [
            HiddenLayer(hidden_layer_size)
            for hidden_layer_size in hidden_layer_sizes
        ]

        for i, hidden_layer in enumerate(self.hidden_layers):
            if i == 0 and i == len(self.hidden_layers) - 1:
                hidden_layer.initialize(self.input_layer, self.output_layer)
            elif i == 0:
                hidden_layer.initialize(self.input_layer,
                                        self.hidden_layers[i + 1])
            elif i == len(self.hidden_layers) - 1:
                hidden_layer.initialize(self.hidden_layers[i - 1],
                                        self.output_layer)
            else:
                hidden_layer.initialize(self.hidden_layers[i - 1],
                                        self.hidden_layers[i + 1])

        if (len(self.hidden_layers)):
            self.output_layer.initialize(self.hidden_layers[-1])
        else:
            self.output_layer.initialize(self.input_layer)

    def predict(self, input_arr):
        self.input_layer.set_values(input_arr)

        for hidden_layer in self.hidden_layers:
            hidden_layer.feed_forward()

        self.output_layer.feed_forward()

        return self.output_layer.values

    def train(self, input_arr, target_arr):
        self.predict(input_arr)

        self.output_layer.calculate_errors(target_arr)
        for hidden_layer in reversed(self.hidden_layers):
            hidden_layer.calculate_errors()

        self.output_layer.adjust_parameters(self.learning_rate)
        for hidden_layer in reversed(self.hidden_layers):
            hidden_layer.adjust_parameters(self.learning_rate)
Beispiel #4
0
    def build_symbolic_graph(self):
        # allocate symbolic variables (defaults to floatX)
        self.x = T.matrix('x')
        if self.target_is_int:
            self.y = T.ivector('y')
        else:
            self.y = T.matrix('y')

        # assemble layers
        self.hidden_layers = []

        this_input = self.x
        this_nin = self.n_in
        for i in xrange(len(self.n_h)):
            hidden_layer = HiddenLayer(self.rng,
                                       input=this_input,
                                       n_in=this_nin,
                                       n_out=self.n_h[i],
                                       activation=self.activations[i],
                                       dropout=self.dropout,
                                       params=self.params_init[i])
            this_input = hidden_layer.output
            this_nin = self.n_h[i]
            self.hidden_layers.append(hidden_layer)

        self.output_layer = OutputLayer(self.rng,
                                        input=self.hidden_layers[-1].output,
                                        n_in=this_nin,
                                        n_out=self.n_out,
                                        non_linearities=self.activations[-1],
                                        params=self.params_init[-1])

        self.layers = self.hidden_layers + [self.output_layer]
Beispiel #5
0
    def __init__(self, args):
        super(SIGN, self).__init__()
        num_convs = args.num_convs
        dense_dims = args.dense_dims
        infeat_dim = args.infeat_dim
        hidden_dim = args.hidden_dim
        self.num_convs = num_convs

        cut_dist = args.cut_dist
        num_angle = args.num_angle
        merge_b2b = args.merge_b2b
        merge_b2a = args.merge_b2a

        activation = args.activation
        num_heads = args.num_heads
        feat_drop = args.feat_drop

        self.input_layer = SpatialInputLayer(hidden_dim,
                                             cut_dist,
                                             activation=F.relu)
        self.atom2bond_layers = nn.LayerList()
        self.bond2bond_layers = nn.LayerList()
        self.bond2atom_layers = nn.LayerList()
        for i in range(num_convs):
            if i == 0:
                atom_dim = infeat_dim
            else:
                atom_dim = hidden_dim * num_heads if 'cat' in merge_b2a else hidden_dim
            bond_dim = hidden_dim * num_angle if 'cat' in merge_b2b else hidden_dim

            self.atom2bond_layers.append(
                Atom2BondLayer(atom_dim,
                               bond_dim=hidden_dim,
                               activation=activation))
            self.bond2bond_layers.append(
                Bond2BondLayer(hidden_dim,
                               hidden_dim,
                               num_angle,
                               feat_drop,
                               merge=merge_b2b,
                               activation=None))
            self.bond2atom_layers.append(
                Bond2AtomLayer(bond_dim,
                               atom_dim,
                               hidden_dim,
                               num_heads,
                               feat_drop,
                               merge=merge_b2a,
                               activation=activation))

        self.pipool_layer = PiPoolLayer(hidden_dim, hidden_dim, num_angle)
        self.output_layer = OutputLayer(hidden_dim, dense_dims)
Beispiel #6
0
    def __init__(self, c, T, n, g, p, control_str):

        super(STGCN, self).__init__()

        self.control_str = control_str
        self.num_layers = len(control_str)
        self.num_nodes = n
        self.layers = nn.ModuleList()
        self.dropout = nn.Dropout(p)
        # Temporal conv kernel size set to 3
        self.Kt = 3
        # c_index controls the change of channels
        c_index = 0
        num_temporal_layers = 0

        # construct network based on 'control_str'
        for i in range(self.num_layers):

            layer_i = control_str[i]

            # Temporal Layer
            if layer_i == 'T':
                self.layers.append(
                    TemporalConvLayer_Residual(c[c_index],
                                               c[c_index + 1],
                                               kernel=self.Kt))
                c_index += 1
                num_temporal_layers += 1

            # Spatio Layer
            if layer_i == 'S':
                self.layers.append(
                    SpatialConvLayer(c[c_index], c[c_index + 1], g))
                c_index += 1

            # Norm Layer
            if layer_i == 'N':
                # TODO: The meaning of this layernorm
                self.layers.append(nn.LayerNorm([n, c[c_index]]))

        # c[c_index] is the last element in 'c'
        # T - (self.Kt - 1) * num_temporal_layers returns the timesteps after previous temporal layer transformations cuz dialiation = 1
        self.output = OutputLayer(c[c_index],
                                  T - (self.Kt - 1) * num_temporal_layers,
                                  self.num_nodes)

        for layer in self.layers:
            layer = layer.cuda()
Beispiel #7
0
    def __init__(self, c, T, n, g, p, control_str):

        super(STGCN_WAVE, self).__init__()

        self.control_str = control_str
        self.num_layers = len(control_str)
        self.layers = nn.ModuleList()
        self.dropout = nn.Dropout(p)
        # c_index controls the change of channels
        c_index = 0
        # diapower controls the change of dilations in temporal CNNs where dilation = 2^diapower
        diapower = 0

        # construct network based on 'control_str'
        for i in range(self.num_layers):

            layer_i = control_str[i]

            # Temporal Layer
            if layer_i == 'T':
                # Notice: dialation = 2^diapower (e.g. 1, 2, 4, 8) so that
                # T_out = T_in - dialation * (kernel_size - 1) - 1 + 1
                # if padding = 0 and stride = 1
                self.layers.append(
                    TemporalConvLayer_Residual(c[c_index],
                                               c[c_index + 1],
                                               dia=2**diapower))
                diapower += 1
                c_index += 1

            # Spatio Layer
            if layer_i == 'S':
                self.layers.append(SpatialConvLayer(c[c_index], c[c_index], g))

            # Norm Layer
            if layer_i == 'N':
                # TODO: The meaning of this layernorm
                self.layers.append(nn.LayerNorm([n, c[c_index]]))

        # c[c_index] is the last element in 'c'
        # T + 1 - 2**(diapower) returns the timesteps after previous temporal layer transformations
        # 'n' will be needed by LayerNorm inside of the OutputLayer
        self.output = OutputLayer(c[c_index], T + 1 - 2**(diapower), n)

        for layer in self.layers:
            layer = layer.cuda()
Beispiel #8
0
 def add_output(self,
                target_shape,
                activation='sigmoid',
                cost_function='sse',
                init_type='random',
                alpha_regularization=0):
     layer_out = OutputLayer(None,
                             self.crt_layer,
                             self.bias,
                             shape=target_shape,
                             activation=activation,
                             init_type=init_type,
                             cost_function=cost_function,
                             regularization_type=self.regularization,
                             alpha_regularization=alpha_regularization)
     self.crt_layer.next_layer = layer_out
     self.crt_layer = layer_out
     self.layers.append(layer_out)
     self.cost_function = cost_function
     return self
Beispiel #9
0
    def build_symbolic_graph(self):
        self.theano_rng = RandomStreams(self.rng.randint(100))

        # allocate symbolic variables (defaults to floatX)
        self.x = T.matrix('x')

        if not self.denoising == None:
            self.corrupted = self.get_corrupted_input(self.x, self.denoising)
        else:
            self.corrupted = self.x * T.ones_like(self.x)

        # assemble layers
        self.hidden_layer = HiddenLayer(self.rng,
                                        input=self.corrupted,
                                        n_in=self.n_in,
                                        n_out=self.n_h,
                                        activation=self.activations[0],
                                        dropout=self.dropout,
                                        params=self.params_init[0])

        if self.tie_weights:
            if self.params_init[1] == None:
                self.params_init[1] = [
                    self.hidden_layer.params[0].T,
                    theano.shared(np.zeros(self.n_in,
                                           dtype=theano.config.floatX),
                                  name='b2')
                ]
            else:
                self.params_init[1] = [
                    self.hidden_layer.params[0].T, self.params_init[1][1]
                ]

        self.output_layer = OutputLayer(self.rng,
                                        input=self.hidden_layer.output,
                                        n_in=self.n_h,
                                        n_out=self.n_in,
                                        non_linearities=self.activations[-1],
                                        params=self.params_init[1])

        self.layers = [self.hidden_layer, self.output_layer]
Beispiel #10
0
    def build_symbolic_graph(self):
        # allocate symbolic variables (defaults to floatX)
        self.x1 = T.matrix('x1')  # context
        self.x2 = T.matrix('x2')  # partial trace
        if self.target_is_int:
            self.y = T.ivector('y')  # next pixel
        else:
            self.y = T.matrix('y')
        self.z = T.matrix('z')  #reconstruction of trace (full trace)

        # make bad outputs
        bad_outputs = make_bad_outs(self.n_trace, self.x2)

        # assemble layers
        self.hidden_layers = []

        hidden_layer_1a = HiddenLayer(self.rng,
                                      input=self.x1,
                                      n_in=self.n_context,
                                      n_out=self.n_h[0],
                                      dropout=self.dropout,
                                      activation=self.activations[0],
                                      params=self.params_init[0])
        hidden_layer_1b = HiddenLayer(self.rng,
                                      input=self.x2,
                                      n_in=self.n_trace,
                                      n_out=self.n_h[1],
                                      dropout=self.dropout,
                                      activation=self.activations[1],
                                      params=self.params_init[1])

        input_to_h2 = T.concatenate(
            [hidden_layer_1a.output, hidden_layer_1b.output], axis=1)

        hidden_layer_2 = HiddenLayer(self.rng,
                                     input=input_to_h2,
                                     n_in=self.n_h[0] + self.n_h[1],
                                     n_out=self.n_h[2],
                                     dropout=self.dropout,
                                     activation=self.activations[2],
                                     params=self.params_init[2])

        recon_layer = OutputLayer(self.rng,
                                  input=hidden_layer_2.output,
                                  n_in=self.n_h[2],
                                  n_out=self.n_recon,
                                  non_linearities=self.activations[3],
                                  params=params_init[3])

        if not self.n_out == 0:
            pred_layer = OutputLayer(self.rng,
                                     input=recon_layer.output,
                                     n_in=self.n_recon,
                                     n_out=self.n_out,
                                     bad_output=bad_outputs,
                                     non_linearities=self.activations[4],
                                     params=self.params_init[4])

        if self.n_out == 0:
            self.layers = [
                hidden_layer_1a, hidden_layer_1b, hidden_layer_2, recon_layer
            ]
        else:
            self.layers = [
                hidden_layer_1a, hidden_layer_1b, hidden_layer_2, recon_layer,
                pred_layer
            ]
Beispiel #11
0
fp = open(filepath, "w")

config = 0

for epoch in epochs:
    for lr in learning_rates:
        for reg in regularizations:
            for alpha in momentums:
                mean_loss = 0
                mean_validation = 0

                for i in range(k):
                    model = NeuralNetwork()
                    model.add(InputLayer(10))
                    model.add(DenseLayer(50, fanin=10))
                    model.add(DenseLayer(30, fanin=50))
                    model.add(OutputLayer(2, fanin=30))
                    model.compile(size, epoch, lr / size, None, reg, alpha,
                                  "mean_squared_error")
                    (train, val) = data.kfolds(index=i, k=k)
                    mean_loss = mean_loss + model.fit(train[0], train[1])[-1]
                    mean_validation = mean_validation + model.evaluate(
                        val[0], val[1])

                fp.write("{}, {}, {}, {}, {}, {}, {}\n".format(
                    config, epoch, lr, reg, alpha, mean_loss / k,
                    mean_validation / k))

                config = config + 1

fp.close()
Beispiel #12
0
import numpy as np

import dataset as ds
from neural_networks import NeuralNetwork
from layers import InputLayer, OutputLayer, DenseLayer
import matplotlib.pyplot as plt

data = ds.MonksDataset()

my_model = NeuralNetwork()
my_model.add(InputLayer(17))
my_model.add(DenseLayer(10, fanin=17, activation="sigmoid"))
my_model.add(OutputLayer(1, fanin=10, activation="sigmoid"))

my_model.compile(122, 600, 0.075, None, 0.0001, 0, "mean_squared_error")

(loss, test_loss, accuracy, test_accuracy) = my_model.fit_monks(
    data.train_data_patterns, data.train_data_targets, data.test_data_patterns,
    data.test_data_targets)

print("Loss: {}".format(loss[-1]))
print("Test Loss: {}".format(test_loss[-1]))

print("Accuracy: {}".format(accuracy[-1]))
print("Test accuracy: {}".format(test_accuracy[-1]))

plot1 = plt.figure(1)
plt.plot(loss)
plt.plot(test_loss, "--")

plot2 = plt.figure(2)