Example #1
0
def main():
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    print 'Imported MNIST data: training input %s and training labels %s.' % (
        x_train.shape, y_train.shape)
    print 'Imported MNIST data: test input %s and test labels %s.' % (
        x_test.shape, y_test.shape)

    N, H, W = x_train.shape
    x = x_train.reshape((N, H * W)).astype('float') / 255
    y = to_categorical(y_train, num_classes=10)

    model = Sequential()
    model.add(Dense(), ReLU(), layer_dim=(28 * 28, 300), weight_scale=1e-2)
    model.add(Dense(), ReLU(), layer_dim=(300, 100), weight_scale=1e-2)
    model.add(Dense(), Softmax(), layer_dim=(100, 10), weight_scale=1e-2)

    model.compile(optimizer=GradientDescent(learning_rate=1e-2),
                  loss_func=categorical_cross_entropy)
    model.fit(x, y, epochs=10, batch_size=50, verbose=False)

    N, H, W = x_test.shape
    x = x_test.reshape((N, H * W)).astype('float') / 255
    y = to_categorical(y_test, num_classes=10)

    model.evaluate(x, y)
def linear_regression(a=1.0, b=0.0):
    X = np.linspace(-100, 100, 200)
    X = X.reshape((-1, 1))
    [train_x, test_x] = split_data(X, ratio=0.8, random=True)
    train_y = a * train_x + b
    test_y = a * test_x + b

    i = Input(1)
    x = Dense(1)(i)

    # define trainer
    trainer = Trainer(loss='mse',
                      optimizer=Adam(learning_rate=0.2),
                      batch_size=50,
                      epochs=50)

    # create model
    model = Sequential(i, x, trainer)

    model.summary()

    # training process
    model.fit(train_x, train_y)

    # predict
    y_hat = model.predict(test_x)
    plt.plot(test_x, test_y, 'b')
    plt.plot(test_x, y_hat, 'r')
    plt.show()
Example #3
0
def default_model():
    """
    Function containing the code definition for training and evaluating the default required model
    """
    model = Sequential(Linear(2, 25), ReLU(), Linear(25, 25), ReLU(),
                       Linear(25, 25), ReLU(), Linear(25, 2))

    train_input, train_target = generate_disc_set(1000)
    test_input, test_target = generate_disc_set(1000)

    values = {"lr": [1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1]}

    cross_validate = args.cross_val

    best_lr = 1e-4
    optimizer = SGDCV(model,
                      nb_epochs=50,
                      mini_batch_size=1,
                      lr=best_lr,
                      criterion=LossMSE())

    if cross_validate:
        optimizer.cross_validate(k=5, values=values, verbose=True)
        optimizer.set_params()

    optimizer.train(train_input, train_target, verbose=True)

    evaluator = Evaluator(model)

    print("Train accuracy: {:.1f}%".format(
        (evaluator.compute_accuracy(train_input, train_target) * 100).item()))
    print("Test accuracy: {:.1f}%".format(
        (evaluator.compute_accuracy(test_input, test_target) * 100).item()))
def run():
    file_path = os.path.dirname(
        os.path.realpath(__file__)) + "/dlmb_mnist_example.json"

    # If a file of the neural-net model's architexture already exists,
    # then there is no need to build a new model.
    if os.path.isfile(file_path):

        # load the model and get its predictions based on x_test
        nn_model = Sequential()
        nn_model.load(file_path)

        predictions = nn_model.predict(x_test)

        # compare the predictions to the correct labels
        print(
            f"This model got a {validate_model(predictions, y_test)/100}% accuracy"
        )

    # If the file doesn't exist then we need to build a neural-net model and train it.
    else:

        # Build the neural-net model
        nn_model = Sequential([
            Dense(
                128, 784, activation="ReLU"
            ),  # for the layer_dim we want 128 outputs and 784 inputs (each pixel on the image)
            Batchnorm(128),
            Dense(128, 128, activation="ReLU"),
            Batchnorm(128),
            Dense(32, 128, activation="ReLU"),
            Batchnorm(32),
            Dense(10, 32, activation="Softmax"
                  )  # We have 10 nodes in the layer for each number from 0 - 9
        ])

        nn_model.build(loss="crossentropy", optimizer="adam")
        # Crossentropy is a good loss function when you are doing logistic regression (classification)
        # Adam is one of the most popular optimizers

        nn_model.train(x_train, y_train, epochs=10, batch_size=1000)
        # Train the model
        # We go through the data 10 times and split the data of 60000 samples into 1000 sized batches leaving 60 samples

        # Now we save the model so we can use it again without re-training
        nn_model.save(file_path)  # When saving, files must end in .json
def test_model_with_softmax():
    from models import Sequential
    from layers import Linear, Softmax

    inputs = np.array([[0.25, 0.63, 0.12]])
    targets = np.array([0, 1, 0])

    model = Sequential()
    model.add(Linear(3, 3, activation=Softmax()))
    predictions = model.feed_forward(inputs)
    loss = ce.loss(predictions, targets)
    for i in range(len(predictions)):
        gradient = ce.backward(predictions[i], targets[i])
        print("grad", gradient)
Example #6
0
def load_model(name):
    type_map = {
        "<class 'layers.SimpleRecurrent'>": SimpleRecurrent,
        "<class 'layers.VanillaRecurrent'>": VanillaRecurrent,
        "<class 'layers.Dense'>": Dense,
        "<class 'layers.Activation'>": Activation,
        "<class 'layers.Softmax'>": Softmax
    }

    with open('{}_network.json'.format(name), 'r') as infile:
        network = json.load(infile)

    shallow_params_dict = np.load('{}.npz'.format(name))
    params_dict = {}

    for k, v in shallow_params_dict.items():
        sep_ind = k.find('__')
        layer_ind = int(k[k.find('_') + 1:sep_ind])
        param_key = k[sep_ind + 2:]

        if layer_ind not in params_dict:
            params_dict[layer_ind] = {}

        params_dict[layer_ind][param_key] = v

    model = Sequential()

    layer_types = network['layer_types']
    layer_configs = network['layer_configs']

    for i in range(len(layer_types)):
        lt = type_map[layer_types[i]]
        config = layer_configs[i]

        layer = lt(**config)

        if layer.trainable:
            layer.set_params_from_dict(params_dict[i])

        model.add(layer)

    return model
Example #7
0
def linear_classification(a=1.0, b=0.0, graph=False):

    # prepare data
    x = np.linspace(-100, 100, 200)
    y = a * x + b
    X = np.array(list(zip(x, y))) + np.random.randn(200, 2) * 100
    Y = to_one_hot(np.where(a * X[:, 0] + b > X[:, 1], 1, 0))
    (train_x, train_y), (test_x, test_y) = split_data(X,
                                                      Y,
                                                      ratio=0.8,
                                                      random=True)

    # build simple FNN
    i = Input(2)
    x = Dense(2, activation='softmax')(i)

    # define trainer
    trainer = Trainer(loss='cross_entropy',
                      optimizer=Adam(learning_rate=0.05),
                      batch_size=50,
                      epochs=50,
                      metrics=['accuracy'])

    # create model
    model = Sequential(i, x, trainer)

    model.summary()

    # training process
    model.fit(train_x, train_y)
    print(model.evaluate(test_x, test_y))

    if graph:
        plt.plot(model.history['loss'])
        plt.show()

        # predict
        y_hat = model.predict(test_x)
        y_hat = np.argmax(y_hat, axis=1)
        simple_plot(test_x, y_hat, a, b)
Example #8
0
def main():
    # 先讀取資料,並建立模型。
    # 輸入的維度為一個資料的長度,因為資料量小,batch size即為資料總數。
    x, y = ParityBits(8).load_data()
    batch_size, input_dim = x.shape
    model = Sequential(
        [Dense(64, activation=ReLU()),
         Dense(32, activation=Tanh()),
         Dense(16, activation=Tanh()),
         Dense(4, activation=None),
         Dense(1, activation=Sigmoid())],
        input_dim=input_dim,
        # 使用GD為優化器,MSE為損失函式。
        optimizer=GradientDescent(learning_rate=0.01, momentum=0.0),
        loss=MeanSquaredError())
    # 設定好epochs後訓練模型,訓練完後取得預測結果和每個epoch的損失值。
    y_pred, losses = model.train(
        x, y, batch_size=batch_size, epochs=200, verbose_step=10)

    # 因為答案皆為整數0或1,因此訓練的成果為模型預測的結果取整數。
    result = np.around(y_pred).astype(int)
    # 將答案與訓練成果相減。
    diff = np.subtract(y, result)
    print(pd.DataFrame({
        # 印出表格時,須將輸入的資料的每項陣列例如`[0 0 0 0 0 0 0 0]`轉成字串,
        # 因為Pandas的DataFrame的每一項不能吃陣列。
        "Data": [np.array_str(v) for v in x],
        "Answer": y[:, 0],
        "Prediction": [f'{v:.8f}' for v in y_pred[:, 0]],
        "Result": result[:, 0],
        # 如果答案與訓練成果在相減之後為0的話代表預測正確,否則失敗。
        "Correct": [True if v == 0 else False for v in diff[:, 0]]
    }, index=np.arange(1, len(x) + 1)).to_string())
    # 輸出最後的損失值和訓練成果與答案差了幾項,並繪製每個epoch與其損失值的變化圖表。
    print(f'loss: {losses[-1]:.8f}, difference: {np.count_nonzero(diff)}')
    plt.figure(figsize=(8, 4))
    plt.plot(losses)
    plt.xlabel('epoch')
    plt.ylabel('loss')
    plt.show()
Example #9
0
def binary_classification():
  def separate_label(data):
    X = normalize(data[:, :2].astype('float32'))
    Y = np.where(data[:, 2] == b'black', 0, 1)
    return X, Y

  # prepare train data
  data_dir = "data/examples/binary_classification"
  train_data_path = os.path.join(data_dir, 'training.arff')
  train_data = load_arff(train_data_path)
  train_x, train_y = separate_label(train_data)
  train_y = to_one_hot(train_y)

  # build simple FNN
  i = Input(2)
  x = Dense(30, activation='relu')(i)
  x = Dense(30, activation='relu')(x)
  x = Dense(2, activation='softmax')(x)

  # define trainer
  trainer = Trainer(loss='cross_entropy', optimizer=Adam(clipvalue=1.0), batch_size=256, epochs=500, metrics=['accuracy'])

  # create model
  model = Sequential(i, x, trainer)

  model.summary()

  # training process
  model.fit(train_x, train_y)

  plt.plot(range(len(model.history['loss'])), model.history['loss'])
  plt.show()

  # predict
  test_data_path = os.path.join(data_dir, 'test.arff')
  test_data = load_arff(test_data_path)
  test_x, _ = separate_label(test_data)

  y_hat = model.predict(test_x)
  simple_plot(test_x, y_hat)
Example #10
0
def universal_approximation(f, x):
    [train_x, test_x] = split_data(x, ratio=0.8, random=True)
    train_y = f(train_x)

    test_x = np.sort(test_x, axis=0)
    test_y = f(test_x)

    # build simple FNN
    i = Input(1)
    x = Dense(50, activation='relu')(i)
    x = Dense(1)(x)

    # define trainer
    schedule = ExponentialDecay(initial_learning_rate=0.01, decay_rate=0.75)
    trainer = Trainer(loss='mse',
                      optimizer=Adam(learning_rate=schedule),
                      batch_size=50,
                      epochs=750)

    # create model
    model = Sequential(i, x, trainer)

    model.summary()

    # training process
    start = time.time()
    model.fit(train_x, train_y)
    print(time.time() - start)

    plt.plot(range(len(model.history['loss'])), model.history['loss'])
    plt.show()

    # predict
    y_hat = model.predict(test_x)
    plt.plot(test_x, test_y, 'b-', label='original')
    plt.plot(test_x, y_hat, 'r-', label='predicted')
    plt.legend()
    plt.show()
Example #11
0
 def get_best_model(self):
     best_model = Sequential(loss=self.best_model_loss,
                             metric=self.best_model_metric)
     best_model.layers = self.best_model_layers
     return best_model
Example #12
0
    return (shared(train_x, borrow=True), shared(test_x, borrow=True),
            shared(valid_x, borrow=True), shared(train_y, borrow=True),
            shared(test_y, borrow=True), shared(valid_y, borrow=True))


(train_x, test_x, valid_x, train_y, test_y,
 valid_y) = load_data('../data/mnist')

# Shared params
epoch = 5
batch_size = 1000

# Without dropout
model = Sequential([
    FullConnected(784, 625, activation='relu'),
    FullConnected(625, 625, activation='relu'),
    FullConnected(625, 10, activation='softmax')
],
                   optimizer=RMSprop())

model.train(train_x,
            train_y,
            epoch=epoch,
            batch_size=batch_size,
            validation_data=(valid_x, valid_y),
            valid_freq=20,
            monitor=True)

score = model.score(test_x, test_y)
print('test score: {0}'.format(score.eval()))
Example #13
0
def main():
    """
    Function containing the main code definition, display all functionalities provided by the framework
    """

    # Different activation functions and setting of automatic Xavier parameter initialization
    relu_model = Sequential(Linear(2, 25),
                            ReLU(),
                            Linear(25, 25),
                            ReLU(),
                            Linear(25, 25),
                            ReLU(),
                            Linear(25, 2),
                            xavier_init=True)
    leaky_relu_model = Sequential(Linear(2, 25),
                                  LeakyReLU(),
                                  Linear(25, 25),
                                  LeakyReLU(),
                                  Linear(25, 25),
                                  LeakyReLU(),
                                  Linear(25, 2),
                                  xavier_init=True)
    tanh_model = Sequential(Linear(2, 25),
                            Tanh(),
                            Linear(25, 25),
                            Tanh(),
                            Linear(25, 25),
                            Tanh(),
                            Linear(25, 2),
                            xavier_init=True)
    sigmoid_model = Sequential(Linear(2, 25),
                               Sigmoid(),
                               Linear(25, 25),
                               Sigmoid(),
                               Linear(25, 25),
                               Sigmoid(),
                               Linear(25, 2),
                               xavier_init=False)

    model_names = ["ReLU", "Leaky", "Tanh", "Sigmoid"]

    train_input, train_target = generate_disc_set(1000)
    test_input, test_target = generate_disc_set(1000)

    # Model training without cross-validation of the optimizer parameters
    optimizer = SGDCV(leaky_relu_model, nb_epochs=25)
    optimizer.train(train_input, train_target)

    evaluator = Evaluator(leaky_relu_model)

    print("Train accuracy using LeakyReLU: {:.1f}%".format(
        (evaluator.compute_accuracy(train_input, train_target) * 100).item()))
    print("Test accuracy using LeakyReLU: {:.1f}%".format(
        (evaluator.compute_accuracy(test_input, test_target) * 100).item()))

    models = (relu_model, leaky_relu_model, tanh_model, sigmoid_model)

    sgd_cross_val_param_grid = {"lr": [1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1]}
    adam_cross_val_param_grid = {
        "lr": [1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1],
        "b1": [0.9, 0.8],
        "b2": [0.999, 0.888],
        "epsilon": [1e-8, 1e-7, 1e-6]
    }

    adam_params = {
        "ReLU": {
            "lr": [0.001],
            "b1": [0.9],
            "b2": [0.999],
            "epsilon": [1e-08]
        },
        "Leaky": {
            "lr": [0.001],
            "b1": [0.9],
            "b2": [0.999],
            "epsilon": [1e-08]
        },
        "Tanh": {
            "lr": [0.001],
            "b1": [0.9],
            "b2": [0.999],
            "epsilon": [1e-08]
        },
        "Sigmoid": {
            "lr": [0.001],
            "b1": [0.9],
            "b2": [0.999],
            "epsilon": [1e-08]
        }
    }

    sgd_params = {
        "ReLU": {
            "lr": [0.001]
        },
        "Leaky": {
            "lr": [0.001]
        },
        "Tanh": {
            "lr": [0.001]
        },
        "Sigmoid": {
            "lr": [0.01]
        }
    }

    mse_loss = not args.CE
    optimizer_sgd = not args.Adam
    cross_validate = args.cross_val

    # Different loss functions
    if mse_loss:
        criterion = LossMSE()
    else:
        criterion = LossCrossEntropy()

    for name, model in zip(model_names, models):
        if optimizer_sgd:
            # SGD optimizer parameter cross-validation
            optimizer = SGDCV(model, mini_batch_size=10, criterion=criterion)

            if cross_validate:
                params = sgd_cross_val_param_grid
            else:
                params = sgd_params[name]

            cross_val_results, best_params_score = optimizer.cross_validate(
                values=params)

            print("Best params for model using {} : (lr={:.3f})".format(
                name, best_params_score["lr"]))
        else:
            # Adam optimizer parameter cross-validation
            optimizer = AdamCV(model, mini_batch_size=10, criterion=criterion)

            if cross_validate:
                params = adam_cross_val_param_grid
            else:
                params = adam_params[name]

            cross_val_results, best_params_score = optimizer.cross_validate(
                values=params)

            print(
                "Best params for model using {} : (lr={:.3f}, b1={:.3f}, b2={:.3f}, epsilon={:.1e})"
                .format(name, best_params_score["lr"], best_params_score["b1"],
                        best_params_score["b2"], best_params_score["epsilon"]))

        print("Best score for model using {} : {:.3f} (+/- {:.3f})".format(
            name, best_params_score["mean"], best_params_score["std"]))
Example #14
0
def cross_val_results(verbose=True):
    """
    Function for generating the accuracy results of four models presented in the report with their best parameters,
    averaged over 10 runs and using different combinations of the available optimizers and loss
    
    :param verbose: whether to print average results for each (Model, Optimizer, Loss) combination,
                    boolean, optional, default is True

    :returns: list of tuples containing (mean, std) of each (Model, Optimizer, Loss) combination, each tuple in [0, 1]^2
    """

    datasets = []

    for i in range(10):
        datasets.append((generate_disc_set(1000), generate_disc_set(1000)))

    relu_model = Sequential(Linear(2, 25), ReLU(),
                            Linear(25, 25), ReLU(),
                            Linear(25, 25), ReLU(),
                            Linear(25, 2), xavier_init=True)

    leaky_relu_model = Sequential(Linear(2, 25), LeakyReLU(),
                                  Linear(25, 25), LeakyReLU(),
                                  Linear(25, 25), LeakyReLU(),
                                  Linear(25, 2), xavier_init=True)

    tanh_model = Sequential(Linear(2, 25), Tanh(),
                            Linear(25, 25), Tanh(),
                            Linear(25, 25), Tanh(),
                            Linear(25, 2), xavier_init=True)

    sigmoid_model = Sequential(Linear(2, 25), Sigmoid(),
                               Linear(25, 25), Sigmoid(),
                               Linear(25, 25), Sigmoid(),
                               Linear(25, 2))

    models = [relu_model, leaky_relu_model, tanh_model, sigmoid_model]

    final_scores = []

    optimizers_names = ["SGD", "Adam"]
    models_names = ["ReLU", "Leaky", "Tanh", "Sigmoid"]

    losses_names = ["MSE", "CrossEntropy"]
    losses = [LossMSE(), LossCrossEntropy()]

    adam_params = {"ReLU": {"lr": 0.001, "b1": 0.9, "b2": 0.999, "epsilon": 1e-08},
                   "Leaky": {"lr": 0.001, "b1": 0.9, "b2": 0.999, "epsilon": 1e-08},
                   "Tanh": {"lr": 0.001, "b1": 0.9, "b2": 0.999, "epsilon": 1e-08},
                   "Sigmoid": {"lr": 0.001, "b1": 0.9, "b2": 0.999, "epsilon": 1e-08}}

    sgd_params = {"ReLU": {"lr": 0.001},
                  "Leaky": {"lr": 0.001},
                  "Tanh": {"lr": 0.001},
                  "Sigmoid": {"lr": 0.01}}

    for optim_name in optimizers_names:
        for loss_name, loss in zip(losses_names, losses):
            for model_name, model in zip(models_names, models):
                if verbose:
                    print("Validating model {} with {} and {} loss...".format(model_name, optim_name, loss_name),
                          end='')
                scores = []

                if optim_name == "Adam":
                    params = adam_params[model_name]
                    optim = Adam(model, criterion=loss, nb_epochs=50, mini_batch_size=10, lr=params["lr"],
                                 b1=params["b1"], b2=params["b2"], epsilon=params["epsilon"])
                else:
                    params = sgd_params[model_name]
                    optim = SGD(relu_model, criterion=loss, nb_epochs=50, mini_batch_size=10, lr=params["lr"])

                for ((train_input, train_target), (test_input, test_target)) in datasets:
                    optim.model = copy.deepcopy(model)

                    optim.train(train_input, train_target, verbose=False)

                    evaluator = Evaluator(optim.model)
                    accuracy = evaluator.compute_accuracy(test_input, test_target)

                    scores.append(accuracy)
                scores = torch.FloatTensor(scores)
                scores_mean = torch.mean(scores).item()
                scores_var = torch.std(scores).item()

                if verbose:
                    print("Score : {0:.3f} (+/- {1:.3f}) ".format(scores_mean, scores_var))

                final_scores.append((scores_mean, scores_var))

    return final_scores
Example #15
0
save_path = "models/mnist_model.pkl"

img_rows = 28
img_cols = 28
input_shape = (1, img_rows, img_cols)
(train_x, train_y), (test_x, test_y) = mnist.load_data()
train_x = np.reshape(train_x, (len(train_x), 1, img_rows, img_cols)).astype(skml_config.config.i_type)
train_y = convert_to_one_hot(train_y, num_classes)
test_x = np.reshape(test_x, (len(test_x), 1, img_rows, img_cols)).astype(skml_config.config.i_type)
test_y = convert_to_one_hot(test_y, num_classes)

train_x, valid_x, train_y, valid_y = train_test_split(train_x, train_y)


filters = 64
model = Sequential()
model.add(Convolution(filters, 3, input_shape=input_shape))
model.add(BatchNormalization())
model.add(ReLU())
model.add(MaxPooling(2))
model.add(Convolution(filters, 3))
model.add(BatchNormalization())
model.add(ReLU())
model.add(GlobalAveragePooling())
model.add(Affine(num_classes))
model.compile(SoftmaxCrossEntropy(), Adam())

train_batch_size = 100
valid_batch_size = 1
print("訓練開始: {}".format(datetime.now().strftime("%Y/%m/%d %H:%M")))
model.fit(train_x, train_y, train_batch_size, 20, validation_data=(valid_batch_size, valid_x, valid_y), validation_steps=1)
Example #16
0
if not PATH.exists():
    content = requests.get(URL + FILENAME).content
    PATH.open("wb").write(content)

with gzip.open(PATH.as_posix(), "rb") as f:
    ((x_train, y_train), (x_test, y_test), _) = pickle.load(f,
                                                            encoding="latin-1")

im_size = (28, 28)
input_dim = np.prod(im_size)

# %% Auto Encoder
autoencoder = Sequential(input_dim,
                         30,
                         10,
                         30,
                         input_dim,
                         activation='logistic')
autoencoder.fit(x_train, x_train, epochs=10)

x_sample = x_test[np.random.randint(1000, size=8)]
output = autoencoder.forward(x_sample)

for i in range(8):
    # plot original image
    ax = plt.subplot(8, 2, 2 * i + 1)
    ax.axis('off')
    ax.imshow(x_sample[i].reshape(im_size), cmap='gray')

    # plot reconstructed image
    ax = plt.subplot(8, 2, 2 * i + 2)
Example #17
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import theano
import theano.tensor as T
from numpy import random as rng
from theano import shared

from layers import FullConnected
from models import Sequential
from optimizer import GradientChecking

sample_size = 100
feature_size = 10
classes_num = 3
X_value = rng.uniform(size=(sample_size, feature_size))
Y_value = np.array(rng.randint(low=0, high=classes_num, size=(sample_size, )),
                   dtype=np.int32)

X = shared(value=X_value, name='X', borrow=True)
Y = shared(value=Y_value, name='Y', borrow=True)

model = Sequential([
    FullConnected(feature_size, 64),
    FullConnected(64, classes_num, activation='softmax')
])

gc = GradientChecking(model)
gc.check_gradient(X_value, Y_value)
Example #18
0
def model_selector(mid, seed=0):

    # ReLU activation
    if mid == 0:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            ReLU(),
            Linear(25, 2, method='random', seed=seed + 3),
            ReLU()
        ])
        return model

    # ReLU & Sigmoid activations
    elif mid == 1:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            ReLU(),
            Linear(25, 2, method='random', seed=seed + 3),
            Sigmoid()
        ])
        return model

    # ReLU & Tanh activations
    elif mid == 2:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            ReLU(),
            Linear(25, 2, method='random', seed=seed + 3),
            Tanh()
        ])
        return model

    # ReLU & Softmax activations (included in the cross entropy)
    elif mid == 3:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            ReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            ReLU(),
            Linear(25, 2, method='random', seed=seed + 3)
        ])
        return model

    # Leaky ReLU activation
    elif mid == 4:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            LeakyReLU(),  #slope = 0.00005),
            Linear(25, 25, method='random', seed=seed + 1),
            LeakyReLU(),  #slope = 0.00005), 
            Linear(25, 25, method='random', seed=seed + 2),
            LeakyReLU(),  #slope = 0.00005), 
            Linear(25, 2, method='random', seed=seed + 3),
            LeakyReLU()
        ])  #slope = 0.00005)])
        return model

    # Leaky ReLU & Sigmoid activations
    elif mid == 5:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            LeakyReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            LeakyReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            LeakyReLU(),
            Linear(25, 2, method='random', seed=seed + 3),
            Sigmoid()
        ])
        return model

    # Leaky ReLU & Tanh activations
    elif mid == 6:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            LeakyReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            LeakyReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            LeakyReLU(),
            Linear(25, 2, method='random', seed=seed + 3),
            Tanh()
        ])
        return model

    # Leaky ReLU & Softmax activations (included in the cross entropy)
    elif mid == 7:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            LeakyReLU(),
            Linear(25, 25, method='random', seed=seed + 1),
            LeakyReLU(),
            Linear(25, 25, method='random', seed=seed + 2),
            LeakyReLU(),
            Linear(25, 2, method='random', seed=seed + 3)
        ])
        return model

    # Tanh activations (included in the cross entropy)
    elif mid == 8:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            Tanh(),
            Linear(25, 25, method='random', seed=seed + 1),
            Tanh(),
            Linear(25, 25, method='random', seed=seed + 2),
            Tanh(),
            Linear(25, 2, method='random', seed=seed + 3),
            Tanh()
        ])
        return model

    # ReLU & Sigmoid activations with BatchNorm
    elif mid == 9:
        model = Sequential([
            Linear(2, 25, method='random', seed=seed),
            BatchNorm(25),
            Tanh(),
            Linear(25, 25, method='random', seed=seed + 1),
            BatchNorm(25),
            Tanh(),
            Linear(25, 25, method='random', seed=seed + 2),
            BatchNorm(25),
            Tanh(),
            Linear(25, 2, method='random', seed=seed + 3),
            Tanh()
        ])
        return model
Example #19
0
#%%
import init

from models import Sequential, Dense
from utils import *

xtr, ytr = np.loadtxt('data/xt'), np.loadtxt('data/yt')
nn = Sequential(2, Dense(8, dropout=0.01), 1, activation='tanh')

#%%
nn.fit(xtr, ytr, lr=5e-3, epochs=50, callbacks=[train_anim(xtr, ytr)])
Example #20
0
import init
from models import Sequential
from layers import Dense
from utils import onehot
import numpy as np
from tensorflow.keras.datasets import mnist

(x_tr, y_tr), (x_ts, y_ts) = mnist.load_data()
im_shape = x_tr[0].shape
im_size = np.prod(im_shape)

def accuracy(model):
    return np.mean(np.argmax((model(x_ts)), axis=(-1)) == y_ts)

nn = Sequential(im_size, Dense(30, activation='tanh'), Dense(10, activation='logistic'))
x_tr = x_tr.reshape(-1, im_size)
x_ts = x_ts.reshape(-1, im_size)
nn.fit(x_tr, (onehot(y_tr, 10)), epochs=10)

print(accuracy(nn))
Example #21
0
        (train_x, valid_x, train_y,
         valid_y) = train_test_split(all_x, all_y, train_size=1 - valid)
        return (shared(train_x, borrow=True), shared(test_x, borrow=True),
                shared(valid_x, borrow=True), shared(train_y, borrow=True),
                shared(test_y, borrow=True), shared(valid_y, borrow=True))
    else:
        return (shared(train_x, borrow=True), shared(test_x, borrow=True),
                shared(train_y, borrow=True), shared(test_y, borrow=True))


dataset = datasets.load_digits()
(train_x, test_x, valid_x, train_y, test_y, valid_y) = load_data(dataset,
                                                                 valid=0.2)

model = Sequential(
    [FullConnected(64, 128),
     FullConnected(128, 10, activation='softmax')],
    optimizer=SGD(lr=0.0001, decay=.001, momentum=0.9))

model.train(train_x,
            train_y,
            epoch=100,
            batch_size=1437,
            validation_data=(valid_x, valid_y),
            valid_freq=5,
            patience=10,
            monitor=True)

score = model.score(test_x, test_y)
print('test score: {0}'.format(score.eval()))
    t = iris_x[:, target].reshape(-1, 1)
    return x, x.shape[1], t, 1


#irisからデータを生成
#x, inputs_shape, t, outputs_shape = create_data_category()
#loss   = "categorical_crossentropy"
#metric = "accuracy"
#last_layer_activation = "softmax"
x, inputs_shape, t, outputs_shape = create_data_numeric(3)
loss = "mean_squared_error"
metric = "rmse"
last_layer_activation = "identify"

seed = 15
model = Sequential(seed=seed)
model.add(Dense(10, activation="relu", inputs_shape=inputs_shape))
model.add(Dense(10, activation="relu"))
model.add(Dense(outputs_shape, activation=last_layer_activation))
model.compile(loss=loss, optimizer=Adam(), metric=metric)

train_x, test_x, train_t, test_t = train_test_split(x,
                                                    t,
                                                    test_size=0.3,
                                                    random_state=seed)
model.fit(train_x, train_t, test_x, test_t, epochs=1000, batch_size=50)

#誤差をプロット
import matplotlib.pyplot as plt

plt.plot(model.history_train[0])