Sha256: 51720ae671ec5b13961271ef12de09db225ed805fc559067e5c187f286857a7a
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
#!/usr/bin/env ruby require 'brains' # RNN to approximate a sine function sequence def generate_sine_test_data(start_t, end_t) inputs = [] outputs = [] (start_t...end_t).each do |t| inputs << [Math.sin(t)] outputs << [Math.sin(t + 1)] end [[inputs, outputs]] end training_data = generate_sine_test_data(0, 10) testing_data = generate_sine_test_data(11, 20) # input sequence input_sequence = training_data[0][0].map { |a| a[0] } output_sequence = training_data[0][1].map { |a| a[0] } test_input_sequence = testing_data[0][0].map { |a| a[0] } test_output_sequence = testing_data[0][1].map { |a| a[0] } nn = Brains::Net.create(1, 1, 1, { neurons_per_layer: 3, learning_rate: 0.01, recurrent: true, output_function: :htan, }) # randomize weights before training nn.randomize_weights results = nn.feed(testing_data[0][0]) results.each_with_index do |a, index| puts "#{test_input_sequence[index]} => #{a[0]}" end result = nn.optimize_recurrent(training_data, 0.001, 100_000_000, 10_000 ) { |i, error| puts "#{i} #{error}" } results = nn.feed(training_data[0][0]) puts " Training data" results.each_with_index do |a, index| puts "#{input_sequence[index]} => #{a[0]} (#{output_sequence[index]})" end puts " Testing data" results = nn.feed(testing_data[0][0]) results.each_with_index do |a, index| puts "#{test_input_sequence[index]} => #{a[0]} (#{test_output_sequence[index]})" end puts nn.to_json
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
brains-0.2.1-java | example/sine_function.rb |