填充输入向量,即 4-D 矩阵,使用 numpy 作为卷积神经网络 (CNN)



这是与我的问题相关的整个代码。您应该能够运行此代码并查看创建的绘图 - 只需将其粘贴并运行到 IDE 中即可。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
x = np.random.randn(4, 3, 3, 2)
x_pad = np.pad(x, ((0,0), (2, 2), (2, 2), (0,0))
, mode='constant', constant_values = (0,0))
print ("x.shape =n", x.shape)
print ("x_pad.shape =n", x_pad.shape)
print ("x[1,1] =n", x[1,1])
print ("x_pad[1,1] =n", x_pad[1,1])
fig, axarr = plt.subplots(1, 2)
axarr[0].set_title('x')
axarr[0].imshow(x[0,:,:,0])
axarr[1].set_title('x_pad')
axarr[1].imshow(x_pad[0,:,:,0])

具体来说,我的问题与这两行代码有关:

x = np.random.randn(4, 3, 3, 2)
x_pad = np.pad(x, ((0,0), (2, 2), (2, 2), (0,0)), mode='constant', constant_values = (0,0))

我想在x中填充第二和第三维度.所以,我想填充x[1],它的值为3x[2]的值也为3.根据我正在解决的问题,分别包含"4"和"2"的x[0]x[3]代表其他东西。x[0]表示此类 3*3 矩阵的数量和通道x[3]

我的问题是关于python如何表示这些信息以及我们如何解释它。这些是一样的吗?

该语句x = np.random.randn (4, 3, 3, 2)创建了一个 4 行 x 3 列的矩阵,此 4*3 矩阵中的每个元素都是 3 行 x 2 列的矩阵。这就是Python表示x_pad的方式。这种理解正确吗?

如果是这样,那么在np.pad语句中,我们填充外部矩阵中的列数(4*3 中的 3 列数(。我们还在"3*2"中填充行数,即 3,即内部矩阵中的行数(。

3, 3in (4, 3, 3, 2( 应该只是一个矩阵的一部分,而不是外部矩阵的列和内部矩阵的行?我无法想象这一点?有人可以澄清一下。谢谢!

这些行:

x = np.random.randn(4, 3, 3, 2)
x_pad = np.pad(x, ((0,0), (2, 2), (2, 2), (0,0)), mode='constant', constant_values = (0,0))

等效于:

x = np.random.randn(4, 3, 3, 2)
x_pad = np.zeros((4, 3+2+2, 3+2+2, 2))
x_pad[:, 2:-2, 2:-2, :] = x

您可以将 4-D 数组解释为 2-D 数组的 2-D 数组,如果它适合此数据代表的任何内容,但 numpy 在内部将数组存储为数据的 1D 数组;x[i,j,k,l]指向data[l+n3*(k + n2*(j + n1*i))]其中 n1、n2、n3 是相应轴的长度。

可视化4D(及更高(阵列对人类来说非常困难。当您处理此类数组时,您只需跟踪四个轴的索引。

最新更新