В верхней части вашего сценария вы определяете
scores = [3.0, 1.0, 0.2]
Это аргумент в вашем первом вызове softmax(scores)
.При преобразовании в массив NumPy scores
это 1-й массив с формой (3,).Вы передаете scores
в функцию, а затем она преобразуется в массив numpy с помощью вызова
x = np.transpose(x)
Однако, он все еще 1-й, с формой (3,).Функция transpose
меняет местами измерения, но не добавляет измерение в 1-й массив.В действительности, transpose
является «безоперационным» при применении к массиву 1-й.
Затем в следующем цикле x[j]
является скаляром типа numpy.float64
, поэтомуНе имеет смысла писать [np.exp(s) for s in x[j]]
.x[j]
является скаляром, а не последовательностью, поэтому вы не можете итерировать по нему.
В нижней части вашего сценария вы переопределяете scores
как
x = np.arange(-2.0, 6.0, 0.1)
scores = np.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)])
Теперьscores
- это двумерный массив (scores.shape
- (3, 80)), поэтому при вызове softmax(scores)
.
вы не получите сообщение об ошибке.