使用 numpy 填充输入向量(4 维矩阵)用于卷积神经网络 (CNN)

Use*_*er1 2 python numpy padding deep-learning conv-neural-network

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

\n\n
import numpy as np\nimport matplotlib.pyplot as plt\n\nnp.random.seed(1)\nx = np.random.randn(4, 3, 3, 2)\nx_pad = np.pad(x, ((0,0), (2, 2), (2, 2), (0,0))\\\n                   , mode=\'constant\', constant_values = (0,0))\nprint ("x.shape =\\n", x.shape)\nprint ("x_pad.shape =\\n", x_pad.shape)\nprint ("x[1,1] =\\n", x[1,1])\nprint ("x_pad[1,1] =\\n", x_pad[1,1])\nfig, axarr = plt.subplots(1, 2)\naxarr[0].set_title(\'x\')\naxarr[0].imshow(x[0,:,:,0])\naxarr[1].set_title(\'x_pad\')\naxarr[1].imshow(x_pad[0,:,:,0])\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
x = np.random.randn(4, 3, 3, 2)\nx_pad = np.pad(x, ((0,0), (2, 2), (2, 2), (0,0)), mode=\'constant\', constant_values = (0,0))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想在 中填充第二维和第三维x。所以,我想填充x[1]哪个值是3x[2]哪个值也有3。根据我正在解决的问题,x[0]x[3]分别包含“4”和“2”,代表其他内容。表示这样的3*3矩阵的数量和通道x[0]的数量。x[3]

\n\n

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

\n\n

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

\n\n

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

\n\n

(4, 3, 3, 2) 中的 3, 3 应该只是一个矩阵的一部分,而不是外部矩阵的列和内部矩阵的行?我很难想象这个?有人可以澄清一下吗?谢谢你!

\n

Han*_*uys 5

这些行:

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))
Run Code Online (Sandbox Code Playgroud)

相当于:

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
Run Code Online (Sandbox Code Playgroud)

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

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