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)).
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.
I think this problem may arise from torch.from_numpy(array)'s mismatching with numpy version or dtype,and use other way of generating a tensor from numpy is a solution.