이미 확인한대로 경로상의 문제인 것 같습니다. 한 가지 의문이 코랩에 들어가서 코랩환경에서는 보통 구글드라이브와 연결해서 사용을 많이 하고 있습니다. 그런데 로컬경로를 사용하셔서 코랩에서 로컬 런타임을 사용하신 것인지 확인 부탁드립니다. 그 것이 아니라 그냥 코랩 (호스트 런타임)에서 사용하셨다면 #1 코랩노트북에 구글 드라이브 연결 from google.colab import drive drive.mount('/content/drive') #2 base_dir = "drive/My Drive/(위치)/" 를 사용해주시면 될 것 같습니다.
안녕하세요 영상보고 많이 배우고있는중인 대학생입니다.
현재 저도 코랩에서 개랑 고양이 CNN분류하려고 하는데요
이 글처럼 학습과 테스트를 위한 데이터를 제 컴퓨터에 폴더로 저장해두고 코딩을 할때 그 폴더의 경로를 넣어서 파일들이 불러와질수 있도록 하려 했는데 그 폴더경로로 불러오는 코딩이 잘못된 것 같습니다. 경로자체는 잘못된거같지 않은데...
일단 윈도우10, 우분투18.04LTS 두군데에서 코랩 들어가서 해봤는데요
두개 다 같은이유로 안됐습니다.
코딩은 이렇습니다.
------------------------------------------------------------------------------------------------------------------------------------
!pip install -q tensorflow-gpu==2.0.0-rc1
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
import os
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import shutil
base_dir = '/C:/Users/리근원/Desktop/'
traint_dir = os.path.join(base_dir, 'traint') #여기 이 세줄 코딩이 문제인거 같습니다.
testt_dir = os.path.join(base_dir, 'testt')
traint_cats_dir = os.path.join(traint_dir, 'cats')
traint_dogs_dir = os.path.join(traint_dir, 'dogs')
testt_cats_dir = os.path.join(testt_dir, 'cats')
testt_dogs_dir = os.path.join(testt_dir, 'dogs')
batch_size = 128
epoch = 15
IMG_HEIGHT = 150
IMG_WIDTH = 150 #여기까진 오류없이 됐는데
traint_image_generator = ImageDataGenerator(rescale=1./255) #이부분부터 오류가 뜹니다.
testt_image_generator = ImageDataGenerator(rescale=1./255)
traint_data_gen = traint_image_generator.flow_from_directory(batch_size=batch_size,
directory=traint_dir,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
오류는
아래처럼 나오네요
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
in ()
6 shuffle=True,
7 target_size=(IMG_HEIGHT, IMG_WIDTH),
----> 8 class_mode='binary')
1 frames
/usr/local/lib/python3.6/dist-packages/keras_preprocessing/image/directory_iterator.py in __init__(self, directory, image_data_generator, target_size, color_mode, classes, class_mode, batch_size, shuffle, seed, data_format, save_to_dir, save_prefix, save_format, follow_links, subset, interpolation, dtype)
113 if not classes:
114 classes = []
--> 115 for subdir in sorted(os.listdir(directory)):
116 if os.path.isdir(os.path.join(directory, subdir)):
117 classes.append(subdir)
FileNotFoundError: [Errno 2] No such file or directory: '/C:/Users/리근원/Desktop/traint'
------------------------------------------------------------------------------------------------------------------------------------------------
FileNotFoundError: [Errno 2] No such file or directory: '/C:/Users/리근원/Desktop/traint'
이렇게 나온거 보면
윗부분 base_dir 설정하는 것에서 문제가 발생한거같습니다.
현재 프로젝트가 이거땜에 진도가 안나가서...코랩도 처음이고요
답변해주시면 정말 감사드리겠습니다.
안녕하세요! 먼저 제 영상으로 공부하신다니 감사드립니다 :)
이미 확인한대로 경로상의 문제인 것 같습니다.
한 가지 의문이 코랩에 들어가서 코랩환경에서는 보통 구글드라이브와 연결해서 사용을 많이 하고 있습니다. 그런데 로컬경로를 사용하셔서 코랩에서 로컬 런타임을 사용하신 것인지 확인 부탁드립니다.
그 것이 아니라 그냥 코랩 (호스트 런타임)에서 사용하셨다면
#1 코랩노트북에 구글 드라이브 연결
from google.colab import drive
drive.mount('/content/drive')
#2
base_dir = "drive/My Drive/(위치)/"
를 사용해주시면 될 것 같습니다.
@@ai-study 말씀해주신 것 참고해서 그부분은 넘어가게 됐습니다 감사드립니다.
그런데 영상을 계속 따라가면서 코딩을 똑같이 쓰면서 실행시켰는데(참고로 아시다시피 저는 데이터가 영상처럼 링크타고가서 하는게 아니라 다운받아서 구글드라이브에 넣어서 했습니다. 그것만 다르네요) 모델을 훈련시키는 코딩에서 오류가 발생했습니다.
코딩은
!pip install -q tensorflow-gpu==2.0.0-rc1
---------------------------------------------
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
----------------------------------------------
import os
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import shutil
------------------------------------------------------------
from google.colab import drive
drive.mount('/content/drive')
----------------------------------------------------
base_dir = 'drive/My Drive/'
traint_dir = os.path.join(base_dir, 'traint')
testt_dir = os.path.join(base_dir, 'testt')
-------------------------------------------------------------------------
traint_cats_dir = os.path.join(traint_dir, 'cats')
traint_dogs_dir = os.path.join(traint_dir, 'dogs')
testt_cats_dir = os.path.join(testt_dir, 'cats')
testt_dogs_dir = os.path.join(testt_dir, 'dogs')
-----------------------------------------------------------------------------------
num_cats_tr = len(os.listdir(traint_cats_dir))
num_dogs_tr = len(os.listdir(traint_dogs_dir))
num_cats_tt = len(os.listdir(testt_cats_dir))
num_dogs_tt = len(os.listdir(testt_dogs_dir))
total_traint = num_cats_tr + num_dogs_tr
total_testt = num_cats_tt + num_dogs_tt
-------------------------------------------------------------------------
print('total training cat images:', num_cats_tr)
print('total training dog images:', num_dogs_tr)
print('total test cat images:', num_cats_tt)
print('total test dog images:', num_dogs_tt)
print('--')
print('Total training images:', total_traint)
print('Total training images:', total_testt)
-------------------------------------------------------------------------
batch_size = 128
epochs = 15
IMG_HEIGHT = 150
IMG_WIDTH = 150
--------------------------------------------------------------------
traint_image_generator = ImageDataGenerator(rescale=1./255)
testt_image_generator = ImageDataGenerator(rescale=1./255)
traint_data_gen = traint_image_generator.flow_from_directory(batch_size=batch_size,
directory=traint_dir,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
---------------------------------------------------------------------------------------------------------
testt_data_gen = testt_image_generator.flow_from_directory(batch_size=batch_size,
directory=testt_dir,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
------------------------------------------------------------------------------------------------------------------------------
sample_training_images, _ = next(traint_data_gen)
------------------------------------------------------------------------------------
def plotImages(images_arr):
fig, axes = plt.subplots(1, 5, figsize=(20,20))
axes = axes.flatten()
for img, ax in zip( images_arr, axes):
ax.imshow(img)
ax.axis('off')
plt.tight_layout()
plt.show()
------------------------------------------------------------
plotImages(sample_training_images[:5])
-------------------------------------------------------------------
model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(1)
])
----------------------------------------------------------------------------------------------------------
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=['accuracy']) // 여기서 warning이 발생했긴 했습니다. 어떤게 곧 사라지고 업데이트 될거라구요
----------------------------------------------------------------------------------------
model.summary()
-------------------------------------
history = model.fit( // 여기서는 model.fit_generator인데 에러가 발생해서 영상을 다시 들어보니 퇴근후 딴짓 님께서 곧 없어질수도 있다고 하시며 warning이 뜬걸 봐서 지금쯤 사라져서 그런거겠구나 하고 fit 을 대신 사용했습니다. waning 문구에서 fit을 대신 쓰라고 한걸 봐서 이렇게 했습니다.
traint_data_gen,
steps_per_epoch=total_traint // batch_size,
epochs=epochs,
testt_data=testt_data_gen,
testt_steps=total_testt // batch_size
) // 여기서 에러가 발생했습니다.
//TypeError Traceback (most recent call last)
in ()
4 epochs=epochs,
5 testt_data=testt_data_gen,
----> 6 testt_steps=total_testt // batch_size
7 )
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
702 epochs = kwargs.pop('nb_epoch')
703 if kwargs:
--> 704 raise TypeError('Unrecognized keyword arguments: ' + str(kwargs))
705 self._assert_compile_was_called()
706 self._check_call_args('fit')
TypeError: Unrecognized keyword arguments: {'testt_data': , 'testt_steps': 6}
---------------------------------------------------------------------------------------------------------------------------------
읽어도 무슨 뜻인지 어떤게 문제여서 어떻게 고치라는건지 잘 모르겠네요...
혹시라도 원인이나 해결방법을 아신다면 알려주시면 정말 감사하겠습니다. 모르신다면 답글 안달아주셔도 괜찮습니다.