Вверх ↑
Ответов: 2059
Рейтинг: 131
#1: 2022-07-01 19:44:12 ЛС | профиль | цитата
Продолжаем разговор.
Обучение из файла(всё в текстовом представлении) сделал, всё пашет, как часы и даже автоматическое построение\добавление промежуточных слоёв, пока не будет нужного результата.
Training File (xor.data):
4 2 1
-1 -1
-1
-1 1
1
1 -1
1
1 1
-1
То есть, задаём входные данные и выходные, а промежуточную архитектуру компонент достраивает сам.
Дальше запутался.

function THIFannNetwork.Train(Input, Output:single): single;
'Будет исполнять одну итерацию обучения с набором входных данных и набором желаемых выходных данных.
@param Входной массив со значением каждого входа сети
@param Выходной массив со значением каждого желаемого выхода сети
@return Среднеквадратическая ошибка после обучения'
Этот момент очень важен для того, чтобы понять - Той ли дорогой идёшь товарисчь!?
Тут целый день думал-думал, думал-думал как лучше сделать пока не получил пенсию, сходил в магазин, но не забылся!
Не секрет, что успех решения задачи на сетке зависит как мы представим входные данные, помимо того, что мы подберём для обучения, и осмысленные выходные данные - что хотим получить.
Например со звуком нет проблем - из BASSа напрямую можно брать single, да и из 3D графики.
С текстом тоже нет проблем. (Понятно, что не буквы передаём, а индексы слов из словаря+спряжение\склонение в четырёх байтах. Я использую конфигурацию от 1 до 0.)
А картинки? И тут вроде всё работает, тем более будет вариант с Cardinal.
Но пока мы говорим о варианте с single.
И вот такие вопросы:..., может кто идею подкинет?
Из за Прокрустова ложа HiAsm в плане передачи данных между точками начинаются неудобства.
1. Мысль первая и самая идиотская.
Делать все преобразования внутри компонента к single.
Понятно, что никакой критики не выдерживает. А была такая мысль.
2. Сделать hiSingleArray из hiRealArray - думаю десять минут работы?
И брать из точек Input := ReadArray(_data_Array); где Input: PArray;
3. Третий вариант - замесить всё на Stream.
Это самый демократичный вариант - пиши в него чего хочешь!
То есть интерфейсом будет Stream, а не Array, и не точка заполнения внутреннего массива через строчные значения.
Но это отодвигает проблему дальше не периферию и её решать другим. А надо?
Понятно почему не делаю переменное число входных и выходных точек для нейронов?
Потому, что это может быть не предложение, а целый рассказ, или картинка.
4. Ну и четвёртое, как мне кажется, что все проблемы снимает.
const
data_null = 0;
data_int = 1;
data_str = 2;
//data_data = 3;
//data_combo = 4;
//data_list = 5;
data_icon = 6;
data_real = 7;
//data_color = 8;
//data_script = 9;
data_stream = 10;
data_bitmap = 11;
//data_wave = 12;
data_array = 13;
//data_comboEx= 14;
data_font = 15;
data_matr = 16;
data_jpeg = 17;
data_menu = 18;
//data_code = 19;
data_object = 20;
data_break = 21; //!!! признак неподключенности точки
data_types = 22;
Помоему здесь дыр полно.
Совсем не рационально впихнуть сюда single!
И не обязательно привязывать к какому нибудь типу, а достаточно размерности 4 байта, тогда и другие типы заработали бы. (Ну и 8, 16 и так далее байта. Всего одна цифирь из этого списка, которая означает бестиповый вариант передачи. Было бы круто) А чего берём из стека это потребитель определяет, так в байткоде делается и в бестипных языках.(Есть по крайней мере три протокола передачи). Понимаем, и система не рассыплется.
Но такого не может быть - потому что не может быть никогда!
А себе я сделаю для пробы.
P.S.
String->HEX->Single Шедевр
Это в С++ изучают
Вот Дон Педро, не в рюшечках дело и не в штанах с люриксом.
И не главное градиет наискосок пустить. Дальше по Чехову.
карма: 6

0
Редактировалось 21 раз(а), последний 2022-07-02 00:53:36