所以任务是使用 PSO 优化神经网络。 PSO 需要所有权重和偏差的一维列表,如 [0.1 0.244 ... 0.214]。神经网络需要不同维度的数组,例如 [[x,y], [m,n], ...(所有隐藏层矩阵)...,[p,q]] X 和 y 是输入层的尺寸,然后是所有隐藏层,最后是 p 和 q - 输出层的尺寸。
我可以轻松地展平数组以将其传递给 PSO,但我需要一种方法来获取修改后的数组并将其重新整形回与 NN 中的起始数组具有相同维度的数组数组。
尺寸取决于层中神经元的数量,我们从一开始就拥有该信息。
我试图跟踪形状数组并创建一个索引数组以知道何时停止,但它似乎不起作用。我现在正在尝试切片,但还没有雪茄。对神经网络进行修改也是可能的,但如何创建它以使其采用预定义的权重列表?可能有一个非常好的和有效的方法来做到这一点,但我只是还没有想到......有什么建议吗?
示例:
a = np.array([1,2,3])
b = np.array([7,8,9,10])
c = np.array([12,13,14,15,16])
b.reshape(2,2)
arr = []
arr.append(a)
arr.append(b)
arr.append(c)
这是一个非常简单的示例,说明神经网络使用的权重列表是什么 - 多维数组列表。如果需要,可以使用 np.asarray(arr) 将 Arr 转换为 numpy 对象数组。
扁平化很容易,这就是我的做法(可能有更好的不需要循环的方法,如果你知道,如果你分享,我将不胜感激)。
展平:
new_arr = np.array([])
for i in range(len(arr)):
new_arr = np.append(arr, arr[i].flatten())
我的问题是如何将 new_arr 重新组合起来看起来像 arr ,是否有一种美观且快速的方法来做到这一点。
最佳答案
您可以将形状保存在变量中(它只是一个元组)。尝试这样的事情:
...
old_shape = arr.shape
# ... do flattening here
new_arr.reshape(old_shape)
关于python - reshape 数组内不同维度的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58996107/