Здесь представлена онлайн демонстрация применения нейронной сети с обучением. В примере необходимо научить нейронную сеть подбирать цвет текста в зависимости от цвета фона с целью получения контрастного сочетания для удобства чтения.

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

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

Для тех кто не в курсе, поясним: YIQ — цветовая модель. Цвет представляется как 3 компоненты — яркость (Y) и две искусственные цветоразностные (I и Q). Сигнал I называется синфазным, Q - квадратурным. Конверсия в RGB и обратно осуществляется по следующим формулам:

R = Y + 0.956 * I + 0.623 * Q;
G = Y - 0.272 * I - 0.648 * Q;
B = Y - 1.105 * I + 1.705 * Q;
Y = 0.299 * R + 0.587 * G + 0.114 * B;
I = 0.596 * R - 0.274 * G - 0.322 * B;
Q = 0.211 * R - 0.522 * G + 0.311 * B;
где R, G, B — соответственно интенсивности цветов красного, зеленого и синего, Y — яркостная составляющая, I и Q — цветоразностные составляющие. Коэффициенты приведены для цветовой температуры в 6500 К, соответствующей естественному освещению в солнечный день.

Приведем код скрипта, определяющего цвет, в соответствии с YIQ-принципом:
var textColor = function (bgColor) {
 var r = bgColor.r * 255,
 g = bgColor.g * 255,
 b = bgColor.b * 255;
 var yiq = (r * 299 + g * 587 + b * 114) / 1000;
 return (yiq >= 128) ? 'black' : 'white';
}
А также, для примера приведем код скрипта, отвечающего за выбор цвета нейронной сетью:
var textColor = function (bgColor) {
 var output = runNetwork(bgColor);
 if (output.black > .5) {
 return 'black';
 }
 return 'white';
}

var runNetwork = function anonymous(input
/**/) {
 var net = {"layers":[{"r":{},"g":{},"b":{}},
{"0":{"bias":-0.7439954767208192,
"weights":{"r":0.6252156072286825,"g":1.2717231654027568,"b":-0.08644114748926303}},
"1":{"bias":-0.5046379167479442,
"weights":{"r":0.556104083964306,"g":0.8285686372017536,"b":0.09164164393733806}},
"2":{"bias":-3.5074721229338217,
"weights":{"r":2.4704917044600703,"g":4.890810968199966,"b":-0.8289126609853802}}},
{"black":{"bias":-3.811293663128499,
"weights":{"0":0.817907418954536,"1":0.2911842754738275,"2":6.746165113763845}}}],
"outputLookup":true,"inputLookup":true};

 for (var i = 1; i < net.layers.length; i++) {
 var layer = net.layers[i];
 var output = {};
 
 for (var id in layer) {
 var node = layer[id];
 var sum = node.bias;
 
 for (var iid in node.weights) {
 sum += node.weights[iid] * input[iid];
 }
 output[id] = (1 / (1 + Math.exp(-sum)));
 }
 input = output;
 }
 return output;
}
Ваши вопросы и замечания можно писать в комментариях.


 Похожие публикации
2016-02-02 • Просмотров [ 383 ]