我正在编写Python代码(也是Python相对较新的代码),使用神经网络进行分类。隐藏层中的神经元数量不同,这意味着我想要保存不同大小的各种矩阵。
如果这是MATLAB,我会做
for layer_iteration = 1 : number_of_layers
cell_matrix{layer_iteration} = create_matrix(size_current, size_previous)
end
将在cell_matrix {layer_iteration}中存储不同大小的矩阵。
我不太确定如何在Python中执行此操作,因此我的第一个想法是在每次迭代时创建矩阵,展平它们并附加它们。然后我创建一个与展平数组大小相同的索引矩阵,其中每个值都是一个整数,指向正确的layer_iteration。然后我可以在以后的操作中使用索引来找到1D矩阵的正确切片并重新整形。这是一些代码:
layer_sizes = [2, 10 ,6 ,2]
total_amount_of_values = 92 e.g. 2*10 + 10*6 + 6*2
W = np.zeros(total_amount_of_values)
idx_W = np.zeros((total_amount_of_values,), dtype=np.int)
it_idx = 0
for idx, val in enumerate(layer_sizes):
to_idx = idx + 1
if idx == 0:
start_idx = 0
else:
start_idx = end_idx
if it_dx < len(layer_sizes)-1:
tmp_W = create_matrix(val, layer_sizes[to_idx])
end_idx = start_idx + layer_sizes[idx + 1] * val
W[start_idx:end_idx] = tmp_W
idx_W[start_idx:end_idx] = int(it_idx)
it_idx += 1
如果我想稍后使用W进行矩阵乘法,我需要做的就是:
tmp_W = W[idx_W == iteration]
tmp_W = np.reshape(tmp_W, (size_1, size_2))
这很好但我已经意识到它根本不像Pythonic。我现在处于代码的一部分,使用我的技术使事情复杂化。根据我当前的代码,更重要的是,我在Python中的教育,我真的会受益于一种更简单的存储不同大小矩阵的方法。
什么是最好的解决方案?
谢谢!