Whenever I try to use the data augmentation ImageDataGenerator I'm getting an error like could not convert string to float. Here is my code.
import numpy as np
import os
import cv2
import matplotlib.pyplot as plt
from pathlib import Path
jpeg_images =
list(Path(r'D:\covid_deep_learning\train\train').glob('**/*.jpg'))
np.array([np.array(cv2.imread(str(file))).flatten() for file in jpeg_images])
folder = ['COVID19_AND_PNEUMONIA','NORMAL']
Path = r'D:\covid_deep_learning\train\train'
for i in range(2):
listing = os.listdir(Path+'/'+folder[i])
for file in listing :
img = cv2.imread(Path+'/'+folder[i]+'/'+file)
resize=cv2.resize(img,(70,70))
cv2.imwrite(Path+'/'+folder[i]+'/'+file,resize)
cv2.imshow('resize', img)
plt.imshow(resize)
print(listing)
print(len(listing))
def load_images(path, df):
train_image = []
for i in tqdm(range(df.shape[0])):
try:
train_image.append(resize)
except OSError:
print(df['id'][i])
image_array = np.array(train_image)
return image_array
train_image_path = r'D:\covid_deep_learning\train\train/'
test_image_path = r'D:\covid_deep_learning\test/'
X = load_images(train_image_path,train)
test_images = load_images(test_image_path, test)
X_train, X_test, y_train, y_test_class = train_test_split(X, y, random_state=42, test_size=0.2)
y_train = pd.get_dummies(y_train)
y_test = pd.get_dummies(y_test_class)
model = Sequential()
model.add(Conv2D(32, (3, 3), padding="same", activation='relu',input_shape=(70,70,3)))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding="same", activation='relu' ))
model.add(BatchNormalization())
model.add(Conv2D(64, (3, 3), padding="same", activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), padding="same", activation='relu' ))
model.add(BatchNormalization())
model.add(Conv2D(128, (3, 3), padding="same", activation='relu' ))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.50))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(2, activation='softmax'))
model.summary()
opt = SGD(lr=1e-3, momentum=0.9, decay=1e-3 / 25)
model.compile(loss='binary_crossentropy',optimizer=opt,metrics=['accuracy'])
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
datagen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
datagen.fit(X_train)
print('augmentation')
After data augmentation I'm getting an error like this:
ValueError Traceback (most recent call last)
<ipython-input-61-f6bc9e2818e8> in <module>
11 fill_mode='nearest')
12
---> 13 datagen.fit(X_train)
14 print('augmentation')
~\Anaconda3\lib\site-packages\keras_preprocessing\image\image_data_generator.py in fit(self, x, augment, rounds, seed)
924 seed: Int (default: None). Random seed.
925 """
--> 926 x = np.asarray(x, dtype=self.dtype)
927 if x.ndim != 4:
928 raise ValueError('Input to `.fit()` should have rank 4. '
~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
ValueError: could not convert string to float: 'NORMAL2-IM-0340-0001.jpeg'
X
. Can you edit your questions and show how you createdX
? $\endgroup$X = load_images(train_image_path,train)
, what is thetrain
variable? In the functionload_images
you start using a variableresize
without defining it. $\endgroup$