1

My current function is as follows:

def soft_max(z):
    t = np.exp(z)
    a = np.exp(z) / np.sum(t, axis=1)
    return a

However I get the error: ValueError: operands could not be broadcast together with shapes (20,10) (20,) since np.sum(t, axis=1) isn't a scalar.

I want to have t / the sum of each row but I don't know how to do this.

3

3 Answers 3

4

You want to do something like (see this post)

def softmax(x, axis=None):
    x = x - x.max(axis=axis, keepdims=True)
    y = np.exp(x)
    return y / y.sum(axis=axis, keepdims=True)
Sign up to request clarification or add additional context in comments.

Comments

3

As of version 1.2.0, scipy includes softmax as a special function:

https://scipy.github.io/devdocs/generated/scipy.special.softmax.html

Use the axis argument do run it over rows.

from scipy.special import softmax
softmax(arr, axis=0)

Comments

2

suppose your z is a 2 dimensional array, try

def soft_max(z):
    t = np.exp(z)
    a = np.exp(z) / np.sum(t, axis=1).reshape(-1,1)
    return a

1 Comment

sorry, np.sum(t, axis=1, keepdims=True) is better than using .reshape. they both are doing the same thing. Overflow may be caused by your input data I think.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.