R将矩阵重整为多维数组以用于卷积神经网络训练

时间:2019-03-12 04:54:58

标签: arrays r tensorflow keras conv-neural-network

我非常想将矩阵重塑为多维数组以用于卷积神经网络训练。

这是一个2x16的示例矩阵(实际矩阵约为11000x1024)

two_samples <- structure(c(257, 17, 258, 18, 65795, 19, 65796, 20, 261, 21,
262, 22, 65799, 23, 65800, 24, 9, 25, 10, 26, 65547, 27, 65548, 
28, 13, 29, 14, 30, 65551, 31, 65552, 32), .Dim = c(2L, 16L))
two_samples
#>      [,1] [,2]  [,3]  [,4] [,5] [,6]  [,7]  [,8] [,9] [,10] [,11] [,12]
#> [1,]  257  258 65795 65796  261  262 65799 65800    9    10 65547 65548
#> [2,]   17   18    19    20   21   22    23    24   25    26    27    28
#>      [,13] [,14] [,15] [,16]
#> [1,]    13    14 65551 65552
#> [2,]    29    30    31    32

在这里,每一行都是一个样本,我想将每个样本表示为彩色图像。而且我想整理数据,使其可以与Keras / Tensorflow一起用于CNN训练。

通过bitwAnd()bitwShiftR()函数从十进制数生成RGB数据。我运行下面的命令从矩阵生成RGB。之后,我将dim()用于数组,并使用aperm()对数组进行整形:

mat_r <- bitwAnd(bitwShiftR(t(two_samples),16), 255)
mat_g <- bitwAnd(bitwShiftR(t(two_samples),8), 255)
mat_b <- bitwAnd(t(two_samples),255)
two_samples_flat <- array(c(mat_r, mat_g, mat_b))
arr <- array(two_samples_flat, dim=c(4,4,3,2))
data <- aperm(arr, c(4,1,2,3))
data[1,,,]
#> , , 1
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    0
#> [2,]    0    0    0    0
#> [3,]    1    1    1    1
#> [4,]    1    1    1    1
#> 
#> , , 2
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    0
#> [2,]    0    0    0    0
#> [3,]    0    0    0    0
#> [4,]    0    0    0    0
#> 
#> , , 3
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]    1    1    0    0
#> [2,]    1    1    0    0
#> [3,]    1    1    0    0
#> [4,]    1    1    0    0

但是,位函数返回平面向量,并且此后修改维数不允许多维数组的正确切片。我的预期尺寸和输出(显示了一个示例)如下所示

> dim(data)
2 4 4 3

> data[1,,,]
, , 1

      [,1] [,2] [,3] [,4] 
 [1,]  0    0    1    1
 [2,]  0    0    1    1 
 [3,]  0    0    1    1
 [4,]  0    0    1    1

, , 2

      [,1] [,2] [,3] [,4] 
 [1,]  1    1    1    1
 [2,]  1    1    1    1
 [3,]  0    0    0    0
 [4,]  0    0    0    0

, , 3

      [,1] [,2] [,3] [,4] 
 [1,]  1    2    3    4
 [2,]  5    6    7    8
 [3,]  9    10   11   12
 [4,]  13   14   15   16

所以,我的问题是,如何从矩阵准备多维数组,以便可以与CNN一起使用。如果我做对了,我可以使用array_reshape来重塑它以用于密集层网络:array_reshape(data, c(num_of_samples, width*height*3))

0 个答案:

没有答案