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日

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测