day day up～ 2023-02-19 11:33 采纳率: 80%

# 神经网络输出多维向量的值都一样是什么问题呀

``````class ActorNetwork(object):
"""
Implements actor network
"""
def __init__(self,sess,state_dim,action_dim,lr,tau):
self.sess = sess
K.set_session(sess)
K.set_learning_phase(1)
self.state_dim = state_dim
self.action_dim = action_dim
self.lr = lr
self.tau = tau
self.mainModel, self.mainModel_weights, self.mainModel_state = self._build_model()
self.targetModel, self.targetModel_weights, _ = self._build_model()
self.sess.run(tf.global_variables_initializer())

def _build_model(self):
input_obs = Input(shape=(self.state_dim,))  # 输入层 返回一个维度为self.state_dim的张量
h = BatchNormalization()(input_obs)
h = Dense(400, kernel_initializer = 'random_uniform')(h)  # 全连接层 400个神经元（即该层的输出维度）
h = LeakyReLU(alpha=0.1)(h)
h = Dense(300, kernel_initializer = 'random_uniform')(h)  # 全连接层 输出维度300
h = LeakyReLU(alpha=0.1)(h)
h = Dense(self.action_dim, kernel_initializer = 'random_uniform')(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)

return model, model.trainable_weights, input_obs

def act(self, state):
act = self.mainModel.predict(state)
return act

``````

``````
```python
for stp in range(int(args['max_episode_len'])):
a = []
for i in range(env.num_UAVs):
actor = actors[i]
a.append(actor.act(np.reshape(s[i], (-1, actor.state_dim))).reshape(actor.action_dim, ))  # 输入状态 输出动作
# reshape 在不改变数据内容的情况下，改变一个数组的格式
# (-1,actor.state_dim) 表示将智能体i的状态信息转化为列数为actor.state_dim的矩阵 行数自适应
# 输入到actor网络的输出结果（动作）再reshape为行数为actor.action_dim的矩阵

for i in range(env.num_UAVs):
# 增加探索扰动, 输出限制在 [0, 1] 范围内
a[i] = np.clip(np.random.normal(a[i], NOISE), 0, 1)

s2, r, done = env.step(a)
s = s2

``````

```

• 写回答

#### 2条回答默认 最新

• 人生取材 2023-02-19 11:41
关注

检查输入数据是否正确：确保您的输入数据已经被正确地预处理和标准化，使其能够适应网络的要求。还要确保您的输入数据与您的问题域相匹配。

检查网络结构：确认您的神经网络结构是否正确并满足您的问题要求。特别是在使用DDPG算法时，Actor网络通常采用全连接网络或卷积神经网络。您可以尝试增加或减少网络的深度和宽度，以看看是否有任何改善。

检查超参数：确保您的优化器和学习率等超参数已正确设置，尝试使用其他优化器和学习率值，观察是否会对网络性能产生影响。

检查目标函数和奖励函数：请确保您的目标函数和奖励函数与您的问题域相匹配，同时考虑使用不同的目标函数和奖励函数来比较其性能。

调试代码：检查您的代码是否存在错误，可能有语法错误或者实现有误。

如果以上方法都没有解决问题，您可能需要深入分析问题所在，比如可视化激活层的输出和权重，来查找问题的根源。

至于您提供的Actor神经网络的模型，我发现它使用了ReLU激活函数，这是一个常用的激活函数，但在某些情况下可能会导致梯度消失的问题。您可以尝试使用其他激活函数，例如LeakyReLU或ELU，看看是否有任何改善。此外，您的输出层使用了tanh激活函数，这意味着输出值将始终在-1和1之间。

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

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

#### 悬赏问题

• ¥15 如何用Thoony写ESP32温湿度检测无源蜂鸣器报警代码？
• ¥20 部件内部的CT图像数据集
• ¥15 Visual studio调用动态库
• ¥15 双目摄像头标定后的校准文件
• ¥15 powerbi矩阵增加度量值后出现对应关系错乱
• ¥30 频率分析法分析绘制奈奎斯特图、波特图
• ¥15 弹出来一万个系统找不到指定的文件框框，怎么解决