Обучение нейронной сети в Ruby

Я совсем новичок, когда дело доходит до нейронные сети. Я боролся с ruby-fann и ai4r весь день, и, к сожалению, мне нечего показать, поэтому я решил зайти на Stack Overflow и спросить здесь знающих людей.

У меня есть набор образцов — каждый день имеет одну точку данных, но они не соответствуют какой-либо четкой закономерности, которую я смог выяснить (я попробовал пару регрессий). Тем не менее, я думаю, было бы неплохо увидеть, есть ли какой-либо способ предсказать данные, поступающие в будущее, только по дате, и я подумал, что нейронная сеть будет хорошим способом сгенерировать функцию, которая могла бы надеяться выразить эту связь. .

Даты — это объекты DateTime, а точки данных — десятичные числа, например 7,68. Я преобразовывал объекты DateTime в числа с плавающей запятой, а затем делил на 10 000 000 000, чтобы получить число от 0 до 1, и я делил десятичные числа на 1000, чтобы также получить число от 0 до 1. У меня более тысячи образцы... вот как выглядит краткий отрывок:

[
  ["2012-03-15", "7.68"],
  ["2012-03-14", "4.221"],
  ["2012-03-13", "12.212"],
  ["2012-03-12", "42.1"]
]

Который после преобразования выглядит так:

[
  [0.13317696, 0.000768],
  [0.13316832, 0.0004221],
  [0.13315968, 0.0012212],
  [0.13315104, 0.00421]
]

Я бы хотел, чтобы это преобразование не было необходимым, но я отвлекся. Проблема в том, что и ai4r, и ruby-fann возвращают одно постоянное число, обычно что-то в середине диапазона образцов, когда я их запускаю.Вот код для ruby-fann:

@fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 3], :num_outputs=>1)
training_data = RubyFann::TrainData.new(:inputs => formatted_data.collect{|d| [d.first]}, :desired_outputs => formatted_data.collect{|d| [d.last]})
@fann.train_on_data(training_data, 1000, 1, 0.0001)
@fann.run([DateTime.now.to_f / 10000000000.0]) # Always something random, and always the same number no matter what date I request it for

И для ai4r:

@ai4r = Ai4r::NeuralNetwork::Backpropagation.new([1, 3, 3, 1])
1000.times do
  formatted_data.each do |data|
    @ai4r.train(data.first, data.last)
  end
end
@ai4r.eval([DateTime.now.to_f / 10000000000.0]) # A different result frmo above, but always seemingly random and the same for any requested date

Я чувствую, что здесь не хватает чего-то очень простого. Я знаю, что это довольно открытый вопрос, но если кто-нибудь может помочь мне понять, как я неправильно обучаю свои нейронные сети, я был бы очень признателен!

6
задан Veraticus 25 July 2013 в 18:13
поделиться