Python ValueError:检查输入时出错:预期密集_1_输入具有形状(24),但获得具有形状(1,)的数组
我试图用我的模型做一个预测,我传递的数组的Python ValueError:检查输入时出错:预期密集_1_输入具有形状(24),但获得具有形状(1,)的数组,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,我试图用我的模型做一个预测,我传递的数组的形状在打印时显示为(24,)。当尝试将数组传递到predict方法时,它会生成以下错误:ValueError:检查输入时出错:预期密集的\u 1\u输入具有形状(24,),但获得了具有形状(1,),但是我知道数组的形状是(24,)。为什么它仍然给出一个错误 以下是我的模型供参考: model=MySequential() 添加(密集(单位=128,激活=relu',输入形状=(24,)) 添加(密集(128,activation='relu')) 添加(
形状在打印时显示为(24,)
。当尝试将数组传递到predict
方法时,它会生成以下错误:ValueError:检查输入时出错:预期密集的\u 1\u输入具有形状(24,),但获得了具有形状(1,)
,但是我知道数组的形状是(24,)
。为什么它仍然给出一个错误
以下是我的模型供参考:
model=MySequential()
添加(密集(单位=128,激活=relu',输入形状=(24,))
添加(密集(128,activation='relu'))
添加(密集(动作大小,激活='softmax'))
compile(优化器='adam',loss='sparse\u categorical\u crossentropy',metrics=['accurity'])
这里有MySequential
类,它是keras.models.Sequential
的一个子类:
class MySequential(顺序):
分数=0
def设置_分数(自我,分数):
self.score=分数
def get_分数(自我):
返回自我评分
我正在运行它的循环:
范围(100)内的i的:
新建模型=创建模型(动作大小)
新的\u模型。\u类\u=顺序
奖励=0
state=env.reset()
尽管如此:
env.render()
打印(state.shape)
输入=状态
input_arr=np.重塑(input_arr,(1,24))
动作=新模型。预测(输入arr)
状态、奖励、完成、信息=环境步骤(操作)
如果这样做:
打破
环境重置()
这是完整的错误堆栈
Traceback (most recent call last):
File "BipedalWalker.py", line 79, in <module>
state, reward, done, info = env.step(action)
File "/Users/arjunbemarkar/Python/MachineLearning/gym/gym/wrappers/time_limit.py", line 31, in step
observation, reward, done, info = self.env.step(action)
File "/Users/arjunbemarkar/Python/MachineLearning/gym/gym/envs/box2d/bipedal_walker.py", line 385, in step
self.joints[0].motorSpeed = float(SPEED_HIP * np.sign(action[0]))
TypeError: only size-1 arrays can be converted to Python scalars
回溯(最近一次呼叫最后一次):
文件“BipedalWalker.py”,第79行,在
状态、奖励、完成、信息=环境步骤(操作)
文件“/Users/arjunbemarkar/Python/MachineLearning/gym/gym/wrappers/time_limit.py”,第31行,步骤
观察、奖励、完成、信息=自我环境步骤(行动)
文件“/Users/arjunbemarkar/Python/MachineLearning/gym/gym/envs/box2d/bipedal_walker.py”,第385行,在步骤中
self.joints[0]。motorSpeed=float(速度*np.sign(动作[0]))
TypeError:只有大小为1的数组才能转换为Python标量
参数input\u shape
指定其中一个样本的输入形状。因此,当您将其设置为(24,)
时,意味着您的每个输入样本都具有(24,)
的形状。但是你必须考虑,模型得到批量的样品作为他们的输入。因此,它们的输入形状为(num_samples,…)
。由于您只想为模型提供一个样本,因此输入数组的形状必须为(1,24)
。因此,您需要重塑当前阵列的形状或在开始处添加新轴:
import numpy as np
# either reshape it
input_arr = np.reshape(input_arr, (1, 24))
# or add a new axis to the beginning
input_arr = np.expand_dims(input_arr, axis=0)
# then call the predict method
preds = model.predict(input_arr) # Note that the `preds` would have a shape of `(1, action_size)`
这不起作用,因为它给出了类型错误:只有大小为1的数组才能转换为Python标量
@ArjunBemarkar如果不看代码,很难判断出哪里出了问题。请编辑您的问题并将此部分的代码作为更新添加到问题的末尾好吗?@ArjunBemarkar您确定state
是一个numpy数组吗?我尝试了input\u arr=np.array(state)
,但是这对我不起作用me@ArjunBemarkar这有点奇怪!您是否可以通过编辑您的问题来添加完整的堆栈跟踪(即错误日志)?