지난 시간에 목표를 여러개 두고 진행을 끝냈었기에 목표들을 지우며 진행해보고자 한다.
😎 머신 러닝 - epoch, batch size, iteration의 의미에 대해 공부하기
😎 해당 모델이 어디에 사용되었는지, dataset은 무엇이었는지 알아보기
😎 .npy 파일에 대해서 알아보기
-.npy 파일이란 NumPy 라이브러리가 설치된 Python 소프트웨어 패키지로 만든 NumPy 배열 파일이다. NumPy (NPY) 파일 형식으로 저장된 배열이 포함되어 있다.
😎 전체적인 코드에 대해서 공부하기 (자세하게 의미를 알기 보다는 한 셀이 의미하는 것이 무엇인지 생각해보기) Colab
def bring_data_from_directory():
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode='categorical', # this means our generator will only yield batches of data, no labels
shuffle=True,
# classes=['class_1','class_2','class_3','class_4','class_5'])
classes=['class_1','class_2','class_3'])
validation_generator = datagen.flow_from_directory(
valid_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode='categorical', # this means our generator will only yield batches of data, no labels
shuffle=True,
# classes=['class_1','class_2','class_3','class_4','class_5'])
classes=['class_1','class_2','class_3'])
return train_generator,validation_generator
-> 이미지를 가져와서 제너레이터 객체로 정의하는 코드
우선 class_1, class_2, class_3으로 라벨링 하였다.
def extract_features_and_store(train_generator,validation_generator,base_model):
# 주석 처리됐던 부분 start
x_generator = None
y_lable = None
batch = 0
for x,y in train_generator:
if batch == (56021/batch_size):
break
print "predict on batch:",batch
batch+=1
if x_generator==None:
x_generator = base_model.predict_on_batch(x)
y_lable = y
print y
else:
x_generator = np.append(x_generator,base_model.predict_on_batch(x),axis=0)
y_lable = np.append(y_lable,y,axis=0)
x_generator,y_lable = shuffle(x_generator,y_lable)
np.save(open('video_x_VGG16.npy', 'w'),x_generator)
np.save(open('video_y_VGG16.npy','w'),y_lable)
batch = 0
x_generator = None
y_lable = None
for x,y in validation_generator:
if batch == (3974/batch_size):
break
print "predict on batch validate:",batch
batch+=1
if x_generator==None:
x_generator = base_model.predict_on_batch(x)
y_lable = y
else:
x_generator = np.append(x_generator,base_model.predict_on_batch(x),axis=0)
y_lable = np.append(y_lable,y,axis=0)
x_generator,y_lable = shuffle(x_generator,y_lable)
np.save(open('video_x_validate_VGG16.npy', 'w'),x_generator)
np.save(open('video_y_validate_VGG16.npy','w'),y_lable)
# end
train_data = np.load(open('video_x_VGG16.npy'))
train_labels = np.load(open('video_y_VGG16.npy'))
train_data,train_labels = shuffle(train_data,train_labels)
validation_data = np.load(open('video_x_validate_VGG16.npy'))
validation_labels = np.load(open('video_y_validate_VGG16.npy'))
validation_data,validation_labels = shuffle(validation_data,validation_labels)
train_data = train_data.reshape(train_data.shape[0],
train_data.shape[1] * train_data.shape[2],
train_data.shape[3])
validation_data = validation_data.reshape(validation_data.shape[0],
validation_data.shape[1] * validation_data.shape[2],
validation_data.shape[3])
return train_data,train_labels,validation_data,validation_labels
-> 지난번 진행과 달라진 코드, 참고하던 깃허브에 주석처리된 코드를 지우고 진행했었는데 video_x_VGG16.npy 파일이 없다는 오류를 경험했었다.
주석처리된 코드가 video_x_VGG16.npy를 생성하는 코드라는 것을 깨닫고 다시 추가하여 진행 중인 상황이다.