day day up~ 2023-02-20 17:11 采纳率: 80%
浏览 28
已结题

神经网络输出的多维向量的值总感觉怪怪的

最近在用DDPG算法解决无人机的轨迹优化问题 想问下大家 为什么我的神经网络输出的多维向量的每个向量值都一样啊(输入是46维 输出的是一个4维的向量)
在网络参数更新前的刚开始的几个steps里 输出一直是下面这样子的:(网络参数更新之后 每个向量的值确实也改变了 但总感觉一开始不应该是这样的 因为开始的这些steps里 输入也是有变化的啊 为啥输出不变呢 而且每个向量的值还都一样)

Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Action: [array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32), array([0.5, 0.5, 0.5, 0.5], dtype=float32)]
Episode: 0     |     Reward: 2584.647520928725     |    Min: 18.447269023774265     |    Max: 6327.96879377968

我的神经网络模型是这样子的:(会是因为我在输入层之后增加了一个批归一化层的原因嘛 可是不加BN层的话 输出就一直取的是边界值 其他方法比如 更改神经元数量 减少层数 改变优化器 损失函数种类这些方法都试过了 可发现结果都还是这样 没什么效果诶。。)

    def _build_model(self):
        input_obs = Input(shape=(self.state_dim,))  # 输入层 返回一个维度为self.state_dim的张量
        h = BatchNormalization(trainable=True)(input_obs)
        h = Dense(400)(h)
        h = LeakyReLU(alpha=0.1)(h)
        h = Dense(300)(h)  # 全连接层 输出维度300
        h = LeakyReLU(alpha=0.1)(h)
        h = Dense(self.action_dim)(h)  # 全连接层 输出维度self.action_dim
        h = Activation('tanh')(h)  # softmax 改为 tanh
        pred = Lambda(lambda h: (h+1)/2)(h)
 
        # RelaxedOneHotCategorical() 函数的作用??? 网络最终输出结果的范围???
        # pred = Lambda(lambda h: tf.contrib.distributions.RelaxedOneHotCategorical(0.5, probs=h).sample())(h)
 
        # 给定输入张量和输出张量 生成一个函数型模型 这里包括一个输入层和3个全连接层
        model = Model(inputs=input_obs, outputs=pred)
 
        # 用于配置训练模型 优化器:Adam 损失函数:categorical_crossentropy
        model.compile(optimizer='Adam', loss='categorical_crossentropy')
 
        return model, model.trainable_weights, input_obs
  • 写回答

2条回答 默认 最新

  • youcans_ 人工智能领域优质创作者 2023-02-21 11:22
    关注

    你是用什么数据训练你的模型?
    看输出结果都是 0.5,似乎模型根本就没有训练。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 2月20日