Why do I get "TypeError: expected np.ndarray (got numpy.ndarray)" when I use torch.from_numpy() function?

Why do I get “TypeError: expected np.ndarray (got numpy.ndarray)” when I use torch.from_numpy() function? Isn’t np.ndarray equivalent to numpy.ndarray? Also, there doesn’t seem to be any np.ndarray type, but only numpy.ndarray type.

Traceback (most recent call last): File "test_opencv.py", line 31, in <module> bounding_boxes, landmarks = detect_faces(img, pnet, rnet, onet) File "/home/xxx/git/project/src/detector.py", line 67, in detect_faces boxes = run_first_stage(image, pnet, scale=s, threshold=thresholds[0]) File "/home/xxx/git/project/src/first_stage.py", line 73, in run_first_stage img = torch.from_numpy(img).unsqueeze(0).permute(0,3,1,2).cuda().float() TypeError: expected np.ndarray (got numpy.ndarray)

Can you share some debugging info like printing type(img) and img.dtype I wrote the same line of code and it worked for me.
There has to be some bug in the data loading process of the image.

Hello It seems you are getting the error because the argument to from_numpy function is a single value rather than array.
In numpy, there is difference between np.array(1) and np.array([1]) and both are completely different data types.
Try torch.from_numpy(np.asarray(x)).

4 Likes

Hello, I have encountered the same problem. Do you have any solutions?Thank you

Try
torch.as_tensor(np.array(pil_img).astype('float'))

It worked for me.

1 Like

Have you fix this problem? I encounter this problem too…

Could you post a minimal code snippet to reproduce this error?

I found it is because of the version of numpy…




信工 刘蓬博

邮箱:pengbo18555@163.com

签名由 网易邮箱大师 定制

It’s also happening to me on numpy 1.17.4, my own solution is to downgrade to 1.16.4

thanks! it worked for me.
Numpy version - 1.19.5

It worked for me. Thank you @raghavendragaleppa

I was working with tabular MNIST data !!
one possible solution that worked for me was,

x_train.reset_index(drop=True,inplace=True)
x_test.reset_index(drop=True,inplace=True)
y_train.reset_index(drop=True,inplace=True)
y_test.reset_index(drop=True,inplace=True)

hope it helps for those using TABULAR dataset

iam trying to run a simple dqn code for cartpole environment in my computer. This is my code updated as you said;

    env = gym.make('CartPole-v1')
    q = Qnet()
    q_target = Qnet()
    q_target.load_state_dict(q.state_dict())
    memory = ReplayBuffer()

    print_interval = 20
    score = 0.0  
    optimizer = optim.Adam(q.parameters(), lr=learning_rate)

    for n_epi in range(10000):
        epsilon = max(0.01, 0.08 - 0.01*(n_epi/200)) #Linear annealing from 8% to 1%
        s = env.reset()
        done = False
        while not done:
            **a = q.sample_action(torch.from_numpy(np.asarray(s)).float(), epsilon)**      
            s_prime, r, done, info = env.step(a)
            done_mask = 0.0 if done else 1.0
            memory.put((s,a,r/100.0,s_prime, done_mask))
            s = s_prime

but iam getting the following error again where everything is fine
Traceback (most recent call last):
File “d:\college\final yr\project\rl-series\dqn\simpledqn.py”, line 114, in
main()
File “d:\college\final yr\project\rl-series\dqn\simpledqn.py”, line 93, in main
a = q.sample_action(torch.from_numpy(np.asarray(s)), epsilon)
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.

Thanks! This solved my issue.