Генерация значений оттенков серого изображения

Я обучил модель (на знаменитых данных MNIST), чтобы научиться идентифицировать изображения цифр от 0 до 9. Значения интенсивности были предоставлены в виде наборов признаков.

Сейчас хочу сам протестировать модель, для этого хочу сказать напишите номер на MS Paint и прогоните модель.

Я знаю, как использовать пакет PNG для преобразования изображения в оттенки серого, но мне нужна помощь в создании изображения с аналогичным диапазоном оттенков серого. В настоящее время, когда я пытаюсь рисовать в Paint, он колеблется от 0: 255, в отличие от тренировочного набора, который также имеет отрицательные значения.

Примечание. Я не знаю, какой формат изображения мне нужно использовать, чтобы получить аналогичные значения интенсивности, самым простым способом было перейти к рисованию и нарисовать цифру.

Проблема: Пример значений серого для цифры 1

im <- matrix(data=rev(X[567,]), nrow=20, ncol=20)

     [,1] [,2] [,3]          [,4]          [,5]          [,6]          [,7]          [,8]          [,9]         [,10]         [,11]         [,12]         [,13]
 [1,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
 [2,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.0000000000  4.306236e-04 -4.538135e-03
 [3,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.0002343973 -1.140496e-02  2.497616e-02
 [4,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  0.000000e+00  1.084559e-04 -0.0017490639 -1.345621e-02  4.384232e-01
 [5,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  2.941176e-05 -4.375000e-04 -0.0261209150  2.488099e-01  9.544290e-01
 [6,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  2.393280e-04 -2.528663e-02  0.1323503711  8.318632e-01  1.015593e+00
 [7,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0001834414 -6.974929e-03  3.770381e-02  0.6445272331  1.033006e+00  8.613194e-01
 [8,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  2.445885e-05 -0.0001720764 -2.008902e-02  2.677583e-01  1.0012065346  9.811198e-01  3.359074e-01
 [9,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  3.487541e-04 -0.0256610004  1.337907e-01  8.190443e-01  1.0119159688  5.299348e-01 -2.273144e-03
[10,]    0    0    0  0.000000e+00  0.0000000000  0.0007352941 -1.754459e-02  0.0444801985  6.604204e-01  1.036383e+00  0.7427878881  6.253465e-02 -1.474359e-02
[11,]    0    0    0  0.000000e+00  0.0000000000 -0.0053142872  3.982375e-02  0.6389624523  1.033114e+00  8.733544e-01  0.1483327546 -1.978789e-02  5.014064e-04
[12,]    0    0    0  0.000000e+00  0.0003370098 -0.0245936309  2.214513e-01  0.9496550623  1.001519e+00  4.032970e-01 -0.0262422045 -1.246885e-03  3.668827e-05
[13,]    0    0    0  2.201296e-05 -0.0071477926  0.0124218676  5.890595e-01  1.0428453590  7.664877e-01  6.238350e-02 -0.0170552566  1.654030e-04  0.000000e+00
[14,]    0    0    0 -1.326593e-04 -0.0214352533  0.1659780263  8.681923e-01  1.0228496087  4.833438e-01 -2.121145e-02 -0.0023410267  1.021242e-06  0.000000e+00
[15,]    0    0    0 -1.412275e-03 -0.0192939474  0.4265679126  1.037142e+00  0.9012997670  9.698972e-02 -1.290765e-02  0.0002604167  0.000000e+00  0.000000e+00
[16,]    0    0    0 -1.593035e-03 -0.0186662922  0.4575771889  1.093103e+00  0.7281629027 -3.015387e-02  7.327410e-04  0.0000000000  0.000000e+00  0.000000e+00
[17,]    0    0    0 -3.634600e-04 -0.0099532952  0.1448730596  4.328676e-01  0.1434386592 -9.253983e-03  3.063725e-05  0.0000000000  0.000000e+00  0.000000e+00
[18,]    0    0    0  4.647181e-05  0.0011291835 -0.0175039746 -5.072072e-02 -0.0191029196  1.039501e-03  1.043178e-17  0.0000000000  0.000000e+00  0.000000e+00
[19,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
[20,]    0    0    0  0.000000e+00  0.0000000000  0.0000000000  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00  0.0000000000  0.000000e+00  0.000000e+00
              [,14]         [,15]         [,16]         [,17] [,18] [,19] [,20]
 [1,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
 [2,] -0.0216402846 -1.239362e-02  2.570125e-05  6.076389e-05     0     0     0
 [3,]  0.6271519370  6.741898e-01  1.490166e-02 -3.797542e-03     0     0     0
 [4,]  1.0680277608  5.460697e-01 -8.837061e-03 -2.389553e-03     0     0     0
 [5,]  0.8673059811  1.769967e-01 -1.832898e-02 -3.108660e-04     0     0     0
 [6,]  0.4489610566 -2.979454e-02 -2.363971e-03  5.238971e-05     0     0     0
 [7,]  0.0371314849 -7.122634e-03  2.040441e-04  0.000000e+00     0     0     0
 [8,] -0.0279941706  7.847214e-04  0.000000e+00  0.000000e+00     0     0     0
 [9,] -0.0058922249  1.244466e-17  0.000000e+00  0.000000e+00     0     0     0
[10,]  0.0003111383  9.320045e-32  0.000000e+00  0.000000e+00     0     0     0
[11,]  0.0000245098  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[12,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[13,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[14,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[15,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[16,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[17,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[18,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[19,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0
[20,]  0.0000000000  0.000000e+00  0.000000e+00  0.000000e+00     0     0     0

image(1:20, 1:20, im, col=gray((0:255)/255)) #But My Lower Values Extend Past Help Required Here too to set the range (NOT 0:255)

Использование функции изображения для печати

Я хочу создать (нарисовать) определенные цифры самостоятельно и протестировать, но я хочу убедиться, что они принадлежат одному и тому же диапазону значений, как мне этого добиться?


person Anurag H    schedule 28.07.2016    source источник
comment
Я озадачен тем, что PNG может стать отрицательным — может быть, Гленн сможет поделиться своими мыслями — @glennranders-pehrson.   -  person Mark Setchell    schedule 28.07.2016
comment
@MarkSetchell Я новичок, когда дело доходит до связи изображений со значениями оттенков серого. Значения были фактически предоставлены в виде наборов функций, в них есть отрицательные значения, на которых я тренировался. Я хочу протестировать модель, написав цифры самостоятельно, но хочу получить значения оттенков серого того же диапазона (чего не происходит, когда я использую краску для рисования числа)   -  person Anurag H    schedule 28.07.2016
comment
Гленн помогает многим людям в Stack Overflow, он был соавтором спецификации PNG и закодировал ее, так что я надеюсь, что он знает ее все тонкости....   -  person Mark Setchell    schedule 28.07.2016


Ответы (1)


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

means <- colMeans(training_data)
std <- apply(training_data, 2, FUN = sd, na.rm = T)
new_im <- scale(im, center = means, scale = std)

Я бы также предложил вернуться и создать новую модель, в которой обучающие данные заранее должным образом масштабируются. Как и @MarkSetchell, я не понимаю, что означают отрицательные значения в PNG.

person K.Daisey    schedule 28.07.2016
comment
Спасибо Дейзи за перспективу. Позвольте мне добавить еще немного контекста: каждый пиксель — это функция, а оттенки серого — связанное с ней значение. Итак, если есть 1000 обучающих наборов, то для этого местоположения пикселя у меня есть тысяча таких значений, и мне потребуется, если мы масштабируем 1000 обучающих наборов для этого пикселя, а не в матрице изображения - person Anurag H; 28.07.2016
comment
@AnuragH Я не уверен, что понял твой комментарий. Скажем, каждое изображение в вашем тренировочном наборе имеет размер 256x256 пикселей, тогда у вас будет 65 536 значений для каждого изображения. Вы имеете в виду, что у вас есть 1000 таких изображений? Это нормально. Просто создайте аккуратную матрицу, в которой каждый столбец представляет собой один пиксель, а каждая строка представляет собой одно изображение. Эта матрица будет иметь размер 1000 x 65 536, что является большим, но все функции, которые я предложил, будут работать нормально. - person K.Daisey; 28.07.2016
comment
Я полностью понимаю то, что вы предложили, и вы абсолютно правы по структуре, и именно так у меня есть данные в тренировочном наборе. Я добавил вам +1 :) Я просто хотел добавить еще немного контекста. Проблема в том, что мне были предоставлены диапазоны данных, как я привел в примере (например, вы говорите, что предварительно масштабированные данные, вероятно, у меня нет немасштабированных значений для получения среднего значения и sd) - person Anurag H; 28.07.2016
comment
При масштабировании ваших новых данных в соответствии со старыми предполагается, что ваши новые данные выглядят как ваши старые данные; новые данные представляют собой случайную выборку из той же популяции, что и старые данные. Это большое предположение. Если вместо этого вы можете масштабировать каждый до внешнего стандарта, возможно, 0:255 (или эквивалентного, в зависимости от того, как вы конвертировали в оттенки серого), вам не нужно беспокоиться об этом предположении. Я не знаком с использованием PNG для преобразования в оттенки серого, но код может дать вам представление о том, какой внешний стандарт использовать. - person K.Daisey; 29.07.2016