Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:检查输入时出错:预期密集_1_输入具有形状(24),但获得具有形状(1,)的数组_Python_Tensorflow_Machine Learning_Keras_Neural Network - Fatal编程技术网

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这有点奇怪!您是否可以通过编辑您的问题来添加完整的堆栈跟踪(即错误日志)?