Home > Enterprise >  Neural network on split data
Neural network on split data

Time:04-20

I have images sample already split into 70% training and 30% testing

 #using this for question one with neural network
 originaldata_train, originaldata_test, targetoriginaldata_train,     targetoriginaldata_test = train_test_split(originalrepo, 
                                                                      target, test_size=0.3, 
                                                                      random_state=42, stratify=target)

  bindata_train, bindata_test, targetbindata_train, targetbindata_test = train_test_split(binarisedrepo, 
                                                                      target, test_size=0.3, 
                                                                      random_state=42, stratify=target)

I have both the binaries and original version split. and I want to apply neural network on one them.

I used keras

 model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16,(3,3),activation = "relu" , input_shape = (180,180,3)) ,
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(32,(3,3),activation = "relu") ,  
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64,(3,3),activation = "relu") ,  
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128,(3,3),activation = "relu"),  
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(), 
tf.keras.layers.Dense(550,activation="relu"),      #Adding the Hidden layer
tf.keras.layers.Dropout(0.1,seed = 2019),
tf.keras.layers.Dense(400,activation ="relu"),
tf.keras.layers.Dropout(0.3,seed = 2019),
tf.keras.layers.Dense(300,activation="relu"),
tf.keras.layers.Dropout(0.4,seed = 2019),
tf.keras.layers.Dense(200,activation ="relu"),
tf.keras.layers.Dropout(0.2,seed = 2019),
tf.keras.layers.Dense(5,activation = "softmax")   #Adding the Output Layer
])


from tensorflow.keras.optimizers import RMSprop,SGD,Adam
adam=Adam(lr=0.001)
model.compile(optimizer='adam',loss =     tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])


history = model.fit(x_train,y_train,epochs = 500 , validation_data = (x_val, y_val))

But I got some errors

  <ipython-input-76-33734b1da1bc> in <module>()
  ----> 1 history = model.fit(x_train,y_train,epochs = 500 ,     validation_data = (x_val, y_val))

   1 frames
  /usr/local/lib/python3.7/dist-         packages/tensorflow/python/framework/func_graph.py in autograph_handler(*args, **kwargs)
  1145           except Exception as e:  # pylint:disable=broad-   except
  1146             if hasattr(e, "ag_error_metadata"):
-> 1147               raise e.ag_error_metadata.to_exception(e)
   1148             else:
   1149               raise

ValueError: in user code:

File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1021, in train_function  *
    return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1010, in step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1000, in run_step  **
    outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 859, in train_step
    y_pred = self(x, training=True)
File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 67, in error_handler
    raise e.with_traceback(filtered_tb) from None
File "/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py", line 264, in assert_input_compatibility
    raise ValueError(f'Input {input_index} of layer "{layer_name}" is '

ValueError: Input 0 of layer "sequential_5" is incompatible with the layer: expected shape=(None, 180, 180, 3), found shape=(None, 10000)

Any one with better approach to solve this or what I need to do please

CodePudding user response:

The error message is telling you the input data is in a wrong format. It doesn't seem the algorithm is wrong, but the data you are feeding it.

It expects an array of shape (180,180,3), a color image maybe? Whereas you are giving it some flat array with 10000 elements.

Double-check the input you are using; It is probably wrong.

I suspect you are giving the array of imageS (i.e, the list of image arrays, instead of the proper/individual array).

CodePudding user response:

The algorithm is fine but the issue is you are telling your algorithm to use shape (180, 180, 3) but you are feeding in shape 10000.

tf.keras.layers.Conv2D(16,(3,3),activation = "relu" , input_shape = (180,180,3)) ,

let calculate

180 * 180 * 3 = 97,200. which is not equals to 10,000.

now try this

Step

  • First convert your data into numpy array using

import numpy as np. np.array(originaldata_train)

  • try this to know the shape you can use

print(originaldata_train.shape).. this will give you a clue on size you can use . e.g (230,390,1)

  • which is the size you can use. you might want to be sure and still reset it again with

Remember you are reshaping with the values you print not 1852, 32, 1

originaldata_train = originaldata_train.reshape(1852, 32, 1)

  • Now let convert it to float

train_images = originaldata_train.astype('float32')

  • convert it here

train_images /= 255

  • You can now feed this to your algorithm

    model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(16,(3,3),activation = "relu" , input_shape = 
      #this will be the shape you set above not 1852, 32, 1
    ( 1852, 32, 1)) ,
     tf.keras.layers.MaxPooling2D(2,2),
    

and try it again.

if you are stuck or need a reference, try this link Sample classification of Images with Neural Network

  • Related