2016-06-24 26 views
1

Ich habe diesen Code:Wie habe ich diese Zahl bekommen?

"""Softmax.""" 

import math 

scores = [3.0, 1.0, 0.2] 

import numpy as np 

def softmax(x): 
    """Compute softmax values for each sets of scores in x.""" 
    pass # TODO: Compute and return softmax(x) 
    sum_denominator = 0 
    powers = [] 
    for item in x: 
     powers.append(math.e**item) 
     sum_denominator = sum_denominator + powers[-1] 
    for idx in range(len(x)): 
     x[idx] = powers[idx]/sum_denominator 
    return x 


print(softmax(scores)) 

# Plot softmax curves 
import matplotlib.pyplot as plt 
x = np.arange(-2.0, 6.0, 0.1) 
scores = np.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)]) 

plt.plot(x, softmax(scores).T, linewidth=2) 
plt.show() 

, die diese produziert:

enter image description here

Ich bin nicht sicher, wie ich das Grundstück bekam. Ich verstehe, dass große Punkte große Wahrscheinlichkeiten ergeben sollten, aber ich kann die Handlung nicht verstehen. numpy.ones_like hat mir auch nicht viel geholfen, oder? :)


Edit:

Da ich eine unklare-what-am-I-fragen Stimme bekam, ich dies zu fragen, wie aus einem Vektor von [0.8360188027814407, 0.11314284146556014, 0.050838355752999165], die das Ergebnis von softmax wird an den scores, ich habe diese Handlung. Ich meine, was ist die Logik dahinter?


Scores (nach vstack()) ist dies:

[[ -2.00000000e+00 -1.90000000e+00 -1.80000000e+00 -1.70000000e+00 -1.60000000e+00 -1.50000000e+00 -1.40000000e+00 -1.30000000e+00 -1.20000000e+00 -1.10000000e+00 -1.00000000e+00 -9.00000000e-01 -8.00000000e-01 -7.00000000e-01 -6.00000000e-01 -5.00000000e-01 -4.00000000e-01 -3.00000000e-01 -2.00000000e-01 -1.00000000e-01 1.77635684e-15 1.00000000e-01 2.00000000e-01 3.00000000e-01 4.00000000e-01 5.00000000e-01 6.00000000e-01 7.00000000e-01 8.00000000e-01 9.00000000e-01 1.00000000e+00 1.10000000e+00 1.20000000e+00 1.30000000e+00 1.40000000e+00 1.50000000e+00 1.60000000e+00 1.70000000e+00 1.80000000e+00 1.90000000e+00 2.00000000e+00 2.10000000e+00 2.20000000e+00 2.30000000e+00 2.40000000e+00 2.50000000e+00 2.60000000e+00 2.70000000e+00 2.80000000e+00 2.90000000e+00 3.00000000e+00 3.10000000e+00 3.20000000e+00 3.30000000e+00 3.40000000e+00 3.50000000e+00 3.60000000e+00 3.70000000e+00 3.80000000e+00 3.90000000e+00 4.00000000e+00 4.10000000e+00 4.20000000e+00 4.30000000e+00 4.40000000e+00 4.50000000e+00 4.60000000e+00 4.70000000e+00 4.80000000e+00 4.90000000e+00 5.00000000e+00 5.10000000e+00 5.20000000e+00 5.30000000e+00 5.40000000e+00 5.50000000e+00 5.60000000e+00 5.70000000e+00 5.80000000e+00 5.90000000e+00] [ 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00] [ 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01 2.00000000e-01]] 
+0

ist nicht das oben genannte 'x' und nicht' scores' nach 'vstack' ?? – ThePredator

+0

'scores' nach' vstack' von 'x' ist eindeutig ein' (3,80) 'dimensionales Array mit' floats' was man bekommt, wenn man es in Bezug auf 'x' plottet, was ein Array von' len ist = 80 von -2,0 bis 6,0 – ThePredator

Antwort

4

So bin ich nicht sicher, ob dies eine Antwort, aber es ist zu kurz, als Kommentar zu veröffentlichen, so dass ich bin Entsendung es als eine Antwort. So

, wenn ich das obige Programm ausführen, ist das, was ich bekommen:

In [12]: %run softmax.py 
[0.8360188027814407, 0.11314284146556014, 0.050838355752999165] 

So klar diese druckt, was man bekommt, aber wenn ich scores jetzt drucken, das ist, was ich (nicht das, was Sie haben geschrieben oben, das ist x mit len = 80 Array).

In [13]: scores 
Out[13]: 
array([[ 0.95, 0.03657602, 0.04026786, 0.04431519, 0.04874866, 
     0.05360079, 0.05890597, 0.06470033, 0.07102165, 0.07790913, 
     0.08540313, 0.09354484, 0.10237584, 0.11193758, 0.12227071, 
     0.13341442, 0.1454055 , 0.15827749, 0.17205954, 0.18677538, 
     0.20244208, 0.21906889, 0.23665609, 0.25519382, 0.27466117, 
     0.29502533, 0.31624106, 0.33825043, 0.36098289, 0.38435576, 
     0.40827509, 0.4326369 , 0.45732888, 0.48223232, 0.50722433, 
     0.53218029, 0.55697628, 0.58149154, 0.60561081, 0.62922636, 
     0.65223985, 0.67456369, 0.69612215, 0.71685193, 0.73670245, 
     0.75563572, 0.77362587, 0.79065851, 0.80672976, 0.82184522, 
     0.8360188 , 0.84927158, 0.86163055, 0.87312754, 0.88379809, 
     0.89368047, 0.90281483, 0.91124236, 0.91900464, 0.9261431 , 
     0.93269849, 0.93871054, 0.94421766, 0.94925668, 0.95386276, 
     0.9580692 , 0.96190744, 0.96540703, 0.9685956 , 0.97149895, 
     0.97414105, 0.97654413, 0.97872877, 0.98071396, 0.98251718, 
     0.98415453, 0.98564077, 0.98698946, 0.98821298, 0.98932269], 
     [ 0.66705977, 0.66473796, 0.66219069, 0.65939813, 0.65633915, 
     0.6529913 , 0.64933087, 0.6453329 , 0.64097135, 0.63621917, 
     0.6310485 , 0.62543093, 0.61933776, 0.61274041, 0.60561081, 
     0.59792194, 0.58964839, 0.58076705, 0.57125779, 0.56110424, 
     0.55029462, 0.53882253, 0.52668782, 0.51389725, 0.50046528, 
     0.48641453, 0.47177622, 0.45659032, 0.4409055 , 0.42477881, 
     0.40827509, 0.39146606, 0.37442922, 0.35724649, 0.34000264, 
     0.32278366, 0.30567506, 0.28876015, 0.27211848, 0.25582435, 
     0.23994563, 0.22454275, 0.20966796, 0.19536494, 0.18166859, 
     0.16860512, 0.15619237, 0.14444028, 0.13335153, 0.12292225, 
     0.11314284, 0.10399876, 0.09547139, 0.08753876, 0.08017635, 
     0.07335776, 0.06705529, 0.06124051, 0.05588473, 0.05095938, 
     0.04643632, 0.04228816, 0.03848839, 0.03501159, 0.03183352, 
     0.02893118, 0.02628289, 0.02386827, 0.02166823, 0.019665 , 
     0.01784202, 0.01618395, 0.0146766 , 0.01330688, 0.0120627 , 
     0.01093297, 0.0099075 , 0.00897694, 0.00813274, 0.00736707], 
     [ 0.29972928, 0.29868602, 0.29754146, 0.29628668, 0.29491219, 
     0.29340791, 0.29176317, 0.28996677, 0.28800699, 0.2858717 , 
     0.28354837, 0.28102423, 0.27828639, 0.27532201, 0.27211848, 
     0.26866364, 0.2649461 , 0.26095546, 0.25668267, 0.25212039, 
     0.24726331, 0.24210857, 0.23665609, 0.23090892, 0.22487355, 
     0.21856014, 0.21198272, 0.20515925, 0.19811161, 0.19086542, 
     0.18344982, 0.17589704, 0.16824189, 0.16052119, 0.15277303, 
     0.14503605, 0.13734866, 0.1297483 , 0.12227071, 0.11494929, 
     0.10781452, 0.10089356, 0.09420989, 0.08778313, 0.08162896, 
     0.07575916, 0.07018176, 0.0649012 , 0.05991871, 0.05523253, 
     0.05083836, 0.04672966, 0.04289806, 0.0393337 , 0.03602556, 
     0.03296177, 0.03012988, 0.02751713, 0.02511063, 0.02289752, 
     0.02086519, 0.0190013 , 0.01729395, 0.01573172, 0.01430372, 
     0.01299962, 0.01180966, 0.0107247 , 0.00973616, 0.00883605, 
     0.00801693, 0.00727192, 0.00659462, 0.00597916, 0.00542012, 
     0.0049125 , 0.00445173, 0.0040336 , 0.00365428, 0.00331024]]) 

Also das scores ist klar, was aufgetragen wird, wenn wir es gegen x plotten, die von -2.0 to 6.0 geht.

Die blue Zeile ist das erste Array (i.e. scores[0]), das durchgehend zunimmt. Die restlichen zwei Arrays sind jedoch ab etwa 0.29.

EDIT:

Der Grund, warum wir dieses Grundstück zu sehen ist, weil, wir sind x gegen softmax(scores) mit Plotten scoresnp.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)]) sein

Wenn Sie nur x,scores plotten, was Sie bekommen werden, nur gerade Linien VERSUCHEN SIE SIE FÜR SICH SELBST.