Error: Input arrays should have the same number of samples as target arrays.Found 6400 input samples and 1600 target samples

0

I'm trying to do classification but I have this error

import os,cv2
import numpy as np
from sklearn.utils import shuffle
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from sklearn.model_selection import train_test_split
from keras import backend as k
k.set_image_dim_ordering('tf')
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD, RMSprop, Adam, 
Adagrad,Adadelta,Adamax,Nadam
from keras import callbacks
from keras.models import load_model

img_rows =150
img_cols=150
num_epoch=50
optimizador='Adadelta'
PATH = os.getcwd()
data_path = PATH + '\variedades'



labels_t=[]
num_classes=2
img_data=[]
input_shape=0
model=0
X_train=''
X_val=''
y_train=''
y_val=''


def carga_dataset():
    global img_rows
    global img_cols
    global data_path
    global labels_t
    global img_data

    img_data_list=[]
    n_imag=0
    n_imag_array=[]
    n_imag_cont=0

    print('ESTRAYENDO DATASET DE LA SIGUIENTE DIRECCION: ' +data_path)
    data_dir_list = os.listdir(data_path)


    for dataset in data_dir_list:
        img_list=os.listdir(data_path+'/'+dataset)
        print('CARGANDO IMAGENES DE LA CARPERTA ->'+'{}\n'.format(dataset))
        for img in img_list:
            n_imag+=1
            input_img=cv2.imread(data_path+'/'+dataset+'/'+img)
            input_img=cv2.cvtColor(input_img,cv2.COLOR_BGR2GRAY)
            input_img_resize=cv2.resize(input_img,(img_rows,img_cols))
            img_data_list.append(input_img_resize)
            n_imag_array.append(n_imag)
            n_imag_cont+=1

    img_data = np.array(img_data_list)
    img_data = img_data.astype('float32')
    img_data/= 255
    img_data = np.expand_dims(img_data,axis=4)

    num_of_samples = img_data.shape[0]
    labels = np.ones((num_of_samples,),dtype='int64')

    labels[0:n_imag_array[0]]=0
    labels[n_imag_array[0]]:n_imag_array[1]=1

    labels_t = labels


def clasificacion_imagenes(labels_t,num_classes):
    print('SE HAN CARGADO',end=' ')
    print (len(labels_t),end=' ')
    print('IMAGENES EN TOTAL')

    Y = np_utils.to_categorical(labels_t,num_classes)


    x,y= shuffle(img_data,Y,random_state=2)
    print('SE HAN GENERADO',end=" ")
    print(len(x),end='')
    print('VECTORES')
    print('SE HAN GENERADO',end=" ")
    print(len(y),end=" ")
    print('ETIQUETAS')

    global X_train,X_val,y_train,y_val
    X_train,X_val,y_val,y_train=train_test_split(x,y,test_size=0.2, random_state=2)
    global input_shape
    input_shape=img_data[0].shape

def crear_modelo(input_shape):
    global model
    global X_train, X_val, y_train, y_val
    global optimizador

    model = Sequential()
    model.add(Conv2D(32,(3,3),padding='same',input_shape=input_shape))
    model.add(Activation('relu'))
    model.add(Conv2D(32,(3,3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.5))
    model.add(Conv2D(64,(3,3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.5))

    model.add(Flatten())
    model.add(Dense(64))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(num_classes))
    model.add(Activation('softmax')) 
model.compile(loss='categorical_crossentropy',optimizer=optimizador,metrics=["accuracy"])

tbCallBack =callbacks.TensorBoard(log_dir='./log'+optimizador+'-gpu-todo',histogram_freq=1,write_graph=True,write_images=False)
tbCallBack.set_model(model)

print('REALIZANDO ENTRENAMIENTO')
hist = model.fit(X_train,y_train,batch_size=4,epochs=num_epoch,verbose=1,validation_data=(X_val,y_val),callbacks=[tbCallBack])

def guardar_modelo(model):
    print('GUARDANDO MODELO')
    model.save('model.hdf5')
    loaded_model=load_model('model.hdf5')
    print('MODELO GUARDADO')

carga_dataset()
clasificacion_imagenes(labels_t,num_classes)
crear_modelo(input_shape)
guardar_modelo(model)

and this is the error I get

C:\Users\Angelo\AppData\Local\Programs\Python\Python36\lib\site- 
packages\sklearn\externals\joblib\externals\cloudpickle\cloudpickle.py:47: 
DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
Using TensorFlow backend.
EXTRAYENDO DATASET DE LA SIGUIENTE DIRECCION: C:\Users\Angelo\Desktop\app procesamiento de imagenes\variedades
CARGANDO IMAGENES DE LA CARPERTA ->gato

CARGANDO IMAGENES DE LA CARPERTA ->perro

SE HAN CARGADO 8000 IMAGENES EN TOTAL
SE HAN GENERADO 8000VECTORES
SE HAN GENERADO 8000 ETIQUETAS
REALIZANDO ENTRENAMIENTO
Traceback (most recent call last):
 File "C:\Users\Angelo\Desktop\app procesamiento de imagenes\aprendizaje.py", line 141, in <module>
crear_modelo(input_shape)
 File "C:\Users\Angelo\Desktop\app procesamiento de imagenes\aprendizaje.py", line 131, in crear_modelo
hist = model.fit(X_train,y_train,batch_size=4,epochs=num_epoch,verbose=1,validation_data=(X_val,y_val),callbacks=[tbCallBack])
 File "C:\Users\Angelo\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 952, in fit
batch_size=batch_size)
 File "C:\Users\Angelo\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 804, in _standardize_user_data
check_array_length_consistency(x, y, sample_weights)
 File "C:\Users\Angelo\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training_utils.py", line 237, in check_array_length_consistency
'and ' + str(list(set_y)[0]) + ' target samples.')
ValueError: Input arrays should have the same number of samples as target arrays. Found 6400 input samples and 1600 target samples. 
    
asked by Angelo tapullima del aguila 26.10.2018 в 23:11
source

0 answers