我正在使用Keras进行一些RL(我是一名火炬手,这是我第二次或第三次使用Keras),下面是简化的代码
model=keras.models.Sequential([
keras.layers.Dense(10,activation='relu',input_shape=[4],name='layer1'),
keras.layers.Dense(4,activation='softmax',name='layer2'),
])
然后我根据一些数据调用它
obs=tf.convert_to_tensor([x1,y1,x2,y2],dtype=tf.float32)
pred=model(obs)
其中x1等是整数,我得到错误
WARNING:tensorflow:Model was constructed with shape Tensor("layer1_input:0", shape=(None, 4), dtype=float32) for input (None, 4), but it was re-called on a Tensor with incompatible shape (4,).
Traceback (most recent call last):
File "C:\Users\milok\ev_rl.py", line 131, in <module>
all_rewards,all_grads = play_multiple(env,n_episodes_per_update,n_max_steps,model,loss_fn)
File "C:\Users\milok\ev_rl.py", line 101, in play_multiple
obs,reward,grad = take_step(env,obs,model,loss_fn)
File "C:\Users\milok\ev_rl.py", line 81, in take_step
pred=model(obs.as_tensor())
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 822, in __call__
outputs = self.call(cast_inputs, *args, **kwargs)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\sequential.py", line 267, in call
return super(Sequential, self).call(inputs, training=training, mask=mask)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 717, in call
convert_kwargs_to_constants=base_layer_utils.call_context().saving)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 891, in _run_internal_graph
output_tensors = layer(computed_tensors, **kwargs)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 822, in __call__
outputs = self.call(cast_inputs, *args, **kwargs)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\keras\layers\core.py", line 1142, in call
outputs = gen_math_ops.mat_mul(inputs, self.kernel)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\ops\gen_math_ops.py", line 5615, in mat_mul
_ops.raise_from_not_ok_status(e, name)
File "C:\Users\milok\Anaconda3\lib\site-packages\tensorflow_core\python\framework\ops.py", line 6606, in raise_from_not_ok_status
six.raise_from(core._status_to_exception(e.code, message), None)
File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: In[0] is not a matrix. Instead it has shape [4] [Op:MatMul]```
错误消息告诉您正在尝试调用形状不兼容的张量上的模型
张量
[x1,y1,x2,y2]
具有形状[4]
,但在设置模型时,使用了一个Dense
节点,该节点需要形状为[batch, 4]
的对象在计算预测时,请注意管理批次维度。。。您必须向模型传递一个dim对象(批量大小,n专长)
obs
应该是形状为(None, 4)
的numpy数组/张量。 https://keras.io/guides/sequential_model/相关问题 更多 >
编程相关推荐