Четверг, 17 октября 2019 14:15

Учимся работать с ruby-fann

Оцените материал
(2 голосов)

Продолжение экспериментов с ruby-fann, рубиновой оберткой FANN (Fast Artificial Neural Network Library is a free open source neural network library, which implements multilayer artificial neural networks in C with support for both fully connected and sparsely connected networks).

Для тех, кто полностью пока "не в теме", в качестве вектора "входного нейрона" и для начал понимания рекомендую недлинное видео:

 

 

И сразу далее, в качестве иллюстрации - простейший пример обучения на основе нейронной сети, созданной посредством FANN. Для наглядности я использовал одну из ипостасей Clippy (Clippy.js is a full Javascript implementation of Microsoft Agent (AKA Clippy and friends), ready to be embedded in any website), симпатичного песика, которого мы будем учить выполнению тех или иных несложных команд... в свете все более и более набирающего обороты отказа от дальнейших мучений животных в цирках и зоопарках во всех цивилизованных (и даже в России) странах, усиленно рекомендую этот док в качестве основы для переквалификации многочисленным дрессировщикам, в самое ближайшее время остающимся, очень хотелось бы надеяться, без своей "работы". Переходите к высоким технологиям, дамы и господа, все от этого только выиграют, и в первую очередь ваши подопечные.

Как всегда, все не просто, а очень просто. Заинтересовавшимся рекомендую первую часть рассказа в этом блоге, также отличный ресурс Practical Artificial Intelligence, простым и понятным английским языком раскрывающего теорию и практику базовых аспектов работы с ruby-fann, scikit-learn, технологии E-learning и многое другое, имеющее непосредственное отношение к AI (Artificial Intelligence, искусственный интеллект). Итак, поехали.

 

К сожалению, нет возможности в настоящий момент показать демо.

 

Живая иллюстрация рассказа доступна по ссылке, на страничке ruby-блога, озаглавленной Dog training on ruby-fann. Что же на ней происходит? Хм, совсем ничего сложного. Взгляните:

 

# Start training:
		15.times do
			command = rand(0..3)
            # If the command is guessed, the dog receives a sugar:)
			if command != training_command
				sugar = 0
			else
				sugar = 1
			end
            # The list of commands and the number of sugar are written in two arrays:
			x_data += [[command]]
			y_data += [[sugar]]
		end

 

Процесс обучения собачки заключен в исполнении четырех различных команд в случайном (рандомном) порядке 15 раз; если выполненная команда совпадает с введенной по кнопке Start training - песик получает поощрение (условное название - sugar, дань "ностальгии" по советскому цирку; надеюсь, всем здесь понятна условность имени этой переменной?), если не совпадает - соответственно, не получает ничего (т.е. значение переменной равно единице либо нулю, в зависимости от условия). Примечание: по умолчанию отмечен чекбокс Hide the training process, что позволяет пропустить визуальное отображение "дрессировки" попросту в целях экономии времени; если снять отметку - собачка в вашем браузере покажет весь пройденный (на сервере) путь познания:

 

# Setup training data model:
		train = RubyFann::TrainData.new(:inputs=>x_data, :desired_outputs=>y_data)
# Setup model and train using training data:
		model = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[6], :num_outputs=>1)
# 500 max_epochs, 10 errors between reports and 0.01 desired MSE (mean-squared-error):
		model.train_on_data(train, 500, 10, 0.01) 

 

Как видите, список исполненных команд и полученные (либо не полученные) в результате куски сахара - становятся двумя массивами x_data и y_data, и вот тут начинает работу нейронная (совсем простенькая) сеть, вычисляющая на основе этих данных вероятности совпадения (в Сети находим и читаем про "вес синапса" и "матрицу весов"); наибольшая и является искомым результатом:

 

#Predicted results:
		arr = [model.run([0]), model.run([1]), model.run([2]), model.run([3])]
#Calculating the highest probability:
		actions_array = ['Sports','Money','Books','Pleased']
		result_command = actions_array[arr.index(arr.compact.max)]

 

Чаще всего собачке удается понять, чего же хочет от нее дрессировщик: вы можете убедиться в этом самостоятельно, открыв страничку блога. Ошибки случаются, но нечасто: при увеличении параметра 0.01 desired MSE (остановка процесса обучения, если ошибка достигает указанного порога) их было бы значительно больше.

Вот как-то так! продолжение следует.

Последнее изменениеЧетверг, 16 декабря 2021 02:24

Оставить комментарий

Добавьте ваш комментарий

Разработка web-проектов

В блоге

Poker onRails