Приветствую вас, любители трейдинга!
Видел на смартлабе посты про Пайтон (Python), читать их было очень интересно, в том числе и про то, как НС торгует на бирже. В настоящее время Пайтон (https://www.python.org/) занимает 3 строчку в рейтинге по языкам программирования (https://www.tiobe.com/tiobe-index//). Сам изучал в детстве бейсик (Basic), потом паскаль (Pascal) и далее посмотрел множество языков программирования, вплоть до ассемблера. Самый тяжелый С++)), а все потому, что у него код пишется сокращенными символами, например «начало» и «конец» программы обозначались фигурными скобками «{ …здесь код… }», а у паскаля «begin» и «end». Согласитесь, проще запомнить слова, чем множество лишних для нас символов, которые хранятся у нас в головном мозге, нейронных клетках. Программировал из любопытства.
Я хочу поделиться с вами, про Нейронную сеть (НС), что меня заставляет двигаться в этом направлении вперед. Простую НС теперь может создать любой желающий, даже ребенок с 6 лет сможет понять суть работы НС и попробовать написать программу. Программировать можно через веб-сайт, например Гугол (Google) сделал потрясающую колабораторию (так он ее называет) для программирования на Пайтон (https://colab.research.google.com/).
Простой код на Пайтон, который обучает НС состоящую из 2 входов и 1 выхода.
import numpy as np
import scipy.special
f_activation = lambda x: scipy.special.expit( x )
def f_derivative( x ):
return x * ( 1 — x )
ls = 0.1
input_layer = np.array( [[0, 0, 1, 1],
[0, 1, 0, 1],
[1, 1, 1, 1]], dtype='float64' )
np.random.seed(1358)
synaptic_weight = 2 * np.random.random( (1, 3) ) — 1
output_layer = np.array( [[0, 0, 0, 1]], dtype='float64' )
print( f'input_layer\n{ input_layer }\nsynaptic_weight\n{ synaptic_weight }\noutput_layer\n{ output_layer }' )
print( f'--------------------------------------------------------------------' )
for i in range( 100000 ):
O_input = np.dot( synaptic_weight, input_layer )
O_output = f_activation( O_input )
O_error = output_layer — O_output
synaptic_weight += ls * np.dot( O_error * f_derivative( O_output ), np.transpose( input_layer ) )
print( f'O_output\n{ O_output }' )
Все что сверху, это обучение НС и чтобы проверить, что все работает запускаем эту строчку:
print( f'Output\n{ f_activation(np.dot(np.array([[0, 1, 1]]), synaptic_weight.T)) }' )
НС на основе обучения выводит результат.
Создание такого кода у меня заняло где-то больше 2х недель, множество прочитанных блогов с различных источников по программированию НС. Каждый пишет по своему, код выглядит по-разному. И я написал входной слой (input_layer) с нейроном смещения (bias), все единицы на нижней строчке. Этот массив подается на вход столбцами, например 0, 0, 1 – на входе два ноля и единица это нейрон смещения. 1, 0, 1. Далее на входе подается второй столбец 1 и 0 + нейрон смещения 1.
Статей про НС очень много и они написаны по-разному.
И для развлечения: http://playground.tensorflow.org
Ресурс, для хранения собственного кода и совместная работа над проектами: https://github.com/
Спасибо за внимание!
Там алгоритм еще тот, аццкий.
Сеть из трех синапсов отличит только черное от белого, и то не факт.
Проявляется это всё когда молодые, смышленные, полные энтузиазма прогеры начитавшись умных книжек начинают пробовать писать любую херню понапихав туда по максимуму всякой архитектуры, паттернов и возможностей языка...
PS: а потом смотришь на это всё и думаешь — вот и не лень же мне было так заморачиваться!?
вабсче-то, это терминологический беспредел зае*… есть перегрузка. и это одна из самых отличных фишек. тем более уж на это сетовать не в век нормальных кодерских мультиязыковых редакторов и уж тем более при наличии давным-давно массы c-ориентированных IDE облегчающих работу с чужим кодом.
также как и все аналогичные артефакты в vb раздражают. хотя VBAшка ща очень активно в ходу