密集层给我二维数组



我正在为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')接收2D阵列?

我期望输出(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,))的输入来构建,否则你会得到错误。如果你只是在做预测,再次运行你的模型定义。

您已经给出了4输入,并且对于这些4输入,模型正在预测4输出。由于输出层有2个神经元,因此,每个4输出都有2的值。似乎一切都很好。输出形状为(4, 2)(不是(2, 4))。

如果你在想它是如何被算作(4, 2)的,那么:手动从左边开始寻找张量的形状,现在如果你进入一个单独的[,你会找到41 dimensional tensors,因此同样地进入任何这些张量,你会再次找到20 dimensional tensors(即scalars),当你到达0 dimensional tensor时,现在停止这个过程。这是(4, 2).

相关内容

  • 没有找到相关文章

最新更新