TypeError: аргумент int () должен быть строкой, байтовым объектом или числом, а не NoneType Deep Learning - PullRequest
1 голос
/ 04 августа 2020

Мы хотели бы разделить наши данные на 3 части, однако получаем следующую ошибку:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Ниже вы можете увидеть наш python -код:

data = pd.read_csv('/content/drive/My Drive/GTruth.csv')

def dataset_gen(data, size = (224,224,3)):
    
    img_data = []
    labels = []
    directory='/content/drive/My Drive/Lungenbilder_gekürzt'
    for filename in os.listdir(directory) :
     if filename.endswith(".jpeg") or filename.endswith(".jpg"):
     #for img_name, pollen_carrying in zip(data['Id'], data['Ground_Truth']):
        img = io.imread(os.path.join(str(directory), str(filename)))
        img = transform.resize(img, size, mode = 'constant')
        img_data.append(img)
        labels.append(kv_dict.get((filename.split('.')[0])))
     else:
         continue    
    return np.array(img_data), np.array(labels)

x, y = dataset_gen(data)

#Train Test Split
X_train, X_1, y_train, y_1 = train_test_split(x, y, test_size=0.5, random_state=42)

y_train = tf.keras.utils.to_categorical(y_train, num_classes = 2) #erstellt Matrix
y_1 = tf.keras.utils.to_categorical(y_1, num_classes = 2)

#Train Test Split
X_cv, X_test, y_cv, y_test = train_test_split(X_1, y_1, test_size=0.2, random_state=42)

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-116-474212bb9856> in <module>()
      2 X_train, X_1, y_train, y_1 = train_test_split(x, y, test_size=0.5, random_state=42)
      3 
----> 4 y_train = tf.keras.utils.to_categorical(y_train, num_classes = 2) #erstellt Matrix
      5 y_1 = tf.keras.utils.to_categorical(y_1, num_classes = 2)
      6 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/np_utils.py in to_categorical(y, num_classes, dtype)
     67 
     68   """
---> 69   y = np.array(y, dtype='int')
     70   input_shape = y.shape
     71   if input_shape and input_shape[-1] == 1 and len(input_shape) > 1:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'


Спасибо за вашу помощь!

Сандра и Леон ie

1 Ответ

1 голос
/ 04 августа 2020

Я думаю, что ошибка вызвана вашим y_train набором данных, содержащим NoneType значения.

Например, здесь я воспроизвожу вашу ошибку, используя простой numpy.array

import numpy as np   
tst = np.array([1, '2', None, 3]) 
np.array(tst, dtype='int') 

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-37b79816a629> in <module>
----> 1 np.array(tst, dtype='int')

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

A Хорошим шагом предварительной обработки при выполнении ML является удаление строк с NaN (особенно в вашей переменной y) после того, как вы прочитали свои данные (или вы можете заполнить их, если знаете, какое должно быть значение по умолчанию)

data = pd.read_csv('/content/drive/My Drive/GTruth.csv')
data.dropna(inplace=True)

Когда вы делаете это для x и y, убедитесь, что вы отбрасываете одни и те же индексы, в противном случае ваши функции (x) будут несовместимы с вашими метками (y). Поэтому здесь я сохраняю только функции x с метками y, отличными от None

x = x[y!=None]
y = y[y!=None]
...