我在为CartPole进行强化学习时遇到了这个问题
model = keras.models.Sequential()model.add(Dense(8,activation = 'relu'))model.add(Dense(2,activation = 'linear')
这是我的模型
state = env.reset()print(state)output:[-0.00315391 -0.0150189 0.01804181 0.02032083]
这是我模型预测的结果
model.predict(state)output:[[-0.00028523 0.00031606] [-0.00135828 0.00150507] [ 0.00500827 -0.01125371] [ 0.00564091 -0.01267526]]
为什么Dense(2,activation='linear')
接收的是二维数组?
我期望输出是形状为(2,1)的数组,但为什么模型接收的是形状为(2,4)的数组?
我发现输出与模型的输出节点和输入形状有关
回答:
状态的形状是(4,)
,所以模型将其视为4个样本(第一维是样本数量)。如果你想传递1个具有4个特征的样本,形状应该为(1,4)
(1个样本,4个特征),这样会给你(1,2)
(1个样本,2个输出)。
像这样传递:
model.predict(np.reshape(state,(1,-1)))# output e.g. # array([[ 0.0078704 , -0.00879759]], dtype=float32) #(1,2)
请注意,你的模型应该使用具有4个特征的输入构建(例如input_shape=(4,)
),否则你会得到错误。如果你只是在进行预测,请重新运行你的模型定义。