コード例 #1
0
ファイル: sine.py プロジェクト: 0x64746b/neural_network_lab
def train(hidden, output, sampling_points):
    """Train the given layers."""
    print('Training...')
    last_training_run = np.zeros(NUM_SAMPLES)
    last_training_errors = np.zeros(NUM_SAMPLES)

    for epoch in range(NUM_EPOCHS):
        current_index = epoch % NUM_SAMPLES
        next_index = (current_index + 1) % NUM_SAMPLES

        if epoch % (20 * NUM_SAMPLES) == 0:
            # change training frequency
            frequency_factor = float(np.random.random_integers(NUM_TRAINING_FREQUENCIES))

            sine_input = np.sin(frequency_factor * sampling_points)
            frequency_input = [frequency_factor] * NUM_SAMPLES

            input_data = np.insert(
                frequency_input,
                range(NUM_SAMPLES),
                sine_input
            ).reshape(NUM_SAMPLES, 2)

            hidden.clear()

        # process inputs
        outputs = output.process(hidden.process(input_data[current_index]))

        # backpropagate errors
        output.errors = sine_input[next_index] - outputs

        hidden.errors.appendleft(expit_prime(hidden.h[0]) * np.dot(output.errors, output.weights))
        for index in range(1, len(hidden.errors)):
            hidden.errors[index] = expit_prime(hidden.h[index]) * np.dot(hidden.errors[index-1], hidden.recurrent_weights)

        # learn
        output.update()
        hidden.update()

        # log last run
        if epoch >= (NUM_EPOCHS - NUM_SAMPLES):
            last_training_run[next_index] = outputs
            last_training_errors[next_index] = output.errors

    return sine_input, last_training_run, last_training_errors
コード例 #2
0
    hidden = Layer(NUM_HIDDEN_NODES, input_data.shape[0], expit)
    output = Layer(len(input_files), NUM_HIDDEN_NODES, softmax)

    average_errors = np.ones(len(input_files))
    accepted_errors = np.full(len(input_files), ACCEPTED_ERROR)

    while not np.all(np.less(average_errors, accepted_errors)):
        # get a random date
        input_data, expected_value = get_input_data(input_files)

        # process inputs
        outputs = output.process(hidden.process(input_data))

        # calculate errors
        output.errors = expected_value - outputs
        hidden.errors = expit_prime(hidden.h) * np.dot(output.errors, output.weights)

        # update weights and biases
        output.update()
        hidden.update()

        average_errors = update_ema(output.errors, average_errors)

    print('last errors:\n', output.errors)
    print('last outputs:\n', outputs)
    print('last outputs rounded:\n', outputs.round())

    #index = expected_value.nonzero()[0][0]
    #print('index of class:', index)
    #print('output of class:', outputs[index])
    #print('error for class:', output.errors[index])