We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
您好,非常感谢您提供的源码,学到了很多。在buffer的处理中,有这样一段代码,它先将数据transpose成(1,2,0,...)格式,然后又做了一个reshape的行为。请问transpose这个数据步骤是必要的吗?我做了一个实验,发现直接将数据进行reshape操作,不进行transpose的动作,对结果没有什么影响。我猜测您是希望打乱数据,不知道这种想法对不对。
@staticmethod def _cast(x: np.ndarray): return x.transpose(1, 2, 0, *range(3, x.ndim)).reshape(-1, *x.shape[3:])
The text was updated successfully, but these errors were encountered:
我这用obs尝试说说我是怎么理解为什么要这个操作的:
# obs初始化结构维度依次是时间步,环境,智能体,然后接基本状态S的形状 self.obs = np.zeros((self.buffer_size + 1, self.n_rollout_threads, self.num_agents, *obs_shape), dtype=np.float32) # 经过函数_cast()操作后,得到的是一个以S为基本元素的列表 obs = ReplayBuffer._cast(buf.obs) # 也就是obs=[S_1,S_2,S_3,........,S_n] #这里的相邻的两个S_1,S_2大概率(只有reshape降维度前分属不同维度的部分不是)是同一个环境下的同一个智能体的两个连续时间步的状态。 # 而如果不进行transpose,这里的两个S_1,S_2大概率是同一个时间步下的同一个环境的两个连续智能体的状态,也就是说此时的两个状态间是没有时间相关性的。 # 这样的话,按照data_chunk_length长度取出来的一个chunk间也是没有时间相关性的,后面进行的rnn训练过程也就没有理论依据了
Sorry, something went wrong.
No branches or pull requests
您好,非常感谢您提供的源码,学到了很多。在buffer的处理中,有这样一段代码,它先将数据transpose成(1,2,0,...)格式,然后又做了一个reshape的行为。请问transpose这个数据步骤是必要的吗?我做了一个实验,发现直接将数据进行reshape操作,不进行transpose的动作,对结果没有什么影响。我猜测您是希望打乱数据,不知道这种想法对不对。
The text was updated successfully, but these errors were encountered: