python - How to use Keras Conv2D layer with variably shaped input -


i've got np array called x_train following properties:

x_train.shape = (139,) x_train[0].shape = (210, 224, 3) x_train[1].shape = (220,180, 3) 

in other words, there 139 observations. each image has different width , height, have 3 channels. dimension should (139, none, none, 3) none = variable.

since don't include dimension number of observations in layer, conv2d layer used input_shape=(none,none,3). gives me error:

expected conv2d_1_input have 4 dimensions, got array shape (139, 1)

my guess problem input shape (139,) instead of (139, none, none, 3). i'm not sure how convert however.

one possible solution problem fill arrays zeros have similar size. afterwards, input shape (139, max_x_dimension, max_y_dimension, 3).

the following functions job:

import numpy np  def fillwithzeros(inputarray, outputshape):     """     fills input array dtype 'object' arrays have same shape 'outputshape'     inputarray: input numpy array     outputshape: max dimensions in inputarray (obtained function 'findmaxshape')      output: inputarray filled zeros     """     length = len(inputarray)     output = np.zeros((length,)+outputshape, dtype=np.uint8)     in range(length):         output[i][:inputarray[i].shape[0],:inputarray[i].shape[1],:] = inputarray[i]     return output  def findmaxshape(inputarray):     """     finds maximum x , y in inputarray dtype 'object' , 3 dimensions     inputarray: input numpy array      output: detected maximum shape     """     max_x, max_y, max_z = 0, 0, 0     array in inputarray:         x, y, z = array.shape         if x > max_x:             max_x = x         if y > max_y:             max_y = y         if z > max_z:             max_z = z     return(max_x, max_y, max_z)  #create random data similar data random_data1 = np.random.randint(0,255, 210*224*3).reshape((210, 224, 3)) random_data2 = np.random.randint(0,255, 220*180*3).reshape((220, 180, 3)) x_train = np.array([random_data1, random_data2])  #convert x_train images have same shape new_shape = findmaxshape(x_train) new_x_train = fillwithzeros(x_train, new_shape) 

Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -