如何制作一个数组,其中每个元素都是随机图像?

时间:2019-02-04 16:37:40

标签: python python-3.x tensorflow keras

我想在python中制作一个数组,其中包含约40000个元素,每个元素都是大小为28x28的随机图像。我使用此代码,但是会产生以下错误。我是python的初学者。

    wtrain=np.zeros((40000,28,28,1))
    for i in range(40000):
        w_main = np.random.randint(2,size=(1,4,4,1))
        w_main=w_main.astype(np.float32)
        w_expand=np.zeros((1,28,28,1),dtype='float32')
        w_expand[:,0:4,0:4]=w_main
        w_expand.reshape(1,28,28,1)
        wtrain[i,:,:,:]=w_expand

错误

  

所有输入数组(x)应该具有相同数量的样本。得到数组   形状:[(49999,28,28,1),(1、28,28,1)]

出什么问题了?如何将这些随机图像添加到训练中?谢谢

我将代码更改为此:

wtrain=[]
for i in range(2):
    w_main = np.random.randint(2,size=(1,4,4,1))
    w_main=w_main.astype(np.float32)
    w_expand=np.zeros((1,28,28,1),dtype='float32')
    w_expand[:,0:4,0:4]=w_main
    w_expand.reshape(1,28,28,1)
    wtrain.append(w_expand)

1 个答案:

答案 0 :(得分:0)

制作具有所需形状的zeros数组-我使用(3,7,7)而不是您的(40000,28,28)。

a = np.zeros((3,7,7))

制作一个具有您指定形状的随机数数组-第一维尺寸与zeros数组相同

b = np.random.randint(0,255, size=(3,4,4))

使用赋值左侧的索引将随机值分配到zeros数组,将这些值放在所需的位置

a[:,:4,:4] = b

结果

In [20]: a[0,...]
Out[20]: 
array([[ 241.,  228.,  176.,  194.,    0.,    0.,    0.],
       [ 185.,  240.,  219.,  175.,    0.,    0.,    0.],
       [ 206.,   82.,   32.,  137.,    0.,    0.,    0.],
       [  58.,  181.,  242.,  168.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.]])

In [21]: a[1,...]
Out[21]: 
array([[  25.,   19.,  251.,   89.,    0.,    0.,    0.],
       [ 204.,   25.,   72.,  176.,    0.,    0.,    0.],
       [ 189.,   37.,   33.,   49.,    0.,    0.,    0.],
       [  72.,  168.,   68.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.]])

In [22]: a[2,...]
Out[22]: 
array([[  74.,  228.,  186.,  133.,    0.,    0.,    0.],
       [ 147.,   83.,  194.,  205.,    0.,    0.,    0.],
       [  34.,  185.,   21.,    6.,    0.,    0.,    0.],
       [  14.,  245.,   46.,  154.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.,    0.,    0.]])

通过重塑添加另一个尺寸

In [26]: x,y,z = a.shape

In [27]: c = a.reshape((x,y,z,1))

In [28]: c.shape
Out[28]: (3, 7, 7, 1)