我们在处理深度学习、深度强化学习输入数据时,经常需要调整数据维度,例如下图所示。
我们有a×b的二维图片(一般就是灰度图片)或数据,构造连续四张图为连续数据,也就是图中图1到图2的变换。
# 沿着新轴连接数组/矩阵,增加一个维度,形成三维数组/矩阵/向量
a3 = np.stack((a2,a2,a2,a2), axis=2)
对应于Tensorflow的输入定义表示法为:
n_features= (None, 50, 50, 4), # 输入“带前三张”灰度图像尺寸与维度
接着,我们要实现每次替换一张图片/一组数据,构造连续新四张图为连续数据,也就是图中图3的变换。
# 合并两个三维,切片取三组
f = np.append(b2,a3[:,:,:3],axis=2)
其中,通过Numpy的appand合并数组/矩阵,需要注意二者b2和a3的维度保持一致,而b1是二维图片,如何变换为三维呢:
# 一维转变为三维
b2 = b1.reshape(3,2,1)
最后,全部演示代码如下:
import numpy as np
if __name__ == '__main__':
a = [0 , 1, 2, 3, 4, 5]
# 取list最后的元素
print(a[-1])
b = [6, 7, 8, 9, 10, 11]
# list转numpy数组
a1 = np.array(a)
print(a1)
# 重新调整数据/矩阵为二维
a2 = a1.reshape(3,2)
print(a2)
# 沿着新轴连接数组/矩阵,增加一个维度,形成三维数组/矩阵/向量
a3 = np.stack((a2,a2,a2,a2), axis=2)
print(a3)
print(a3.shape)
b1 = np.array(b)
# 一维转变为三维
b2 = b1.reshape(3,2,1)
print(b2)
# 合并两个三维,切片取三组
f = np.append(b2,a3[:,:,:3],axis=2)
print(f)
输出效果如下:
5
[0 1 2 3 4 5]
[[0 1]
[2 3]
[4 5]]
[[[0 0 0 0]
[1 1 1 1]]
[[2 2 2 2]
[3 3 3 3]]
[[4 4 4 4]
[5 5 5 5]]]
(3, 2, 4)
[[[ 6]
[ 7]]
[[ 8]
[ 9]]
[[10]
[11]]]
[[[ 6 0 0 0]
[ 7 1 1 1]]
[[ 8 2 2 2]
[ 9 3 3 3]]
[[10 4 4 4]
[11 5 5 5]]]
参考:
《强化学习之迷宫DQN(NIPS 2015版)实践笔记——入门提升篇》 CSDN博客 , 肖永威 ,2021.01