묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
DNN GridsearchCV시 score가 좀 이상합니다
안녕하세요, 딥러닝 모델을 sklearn GridsearchCV를 통해 튜닝하고 있습니다. 모델과 GridsearchCV는 아래와 같이 정의되어 있습니다. def create_model(n_filter_1st_conv, conv_n_filter, conv_kernel_sizes, n_params_1st_dense, dense_layer_sizes, dropout, lr, l1, l2): model = Sequential() model.add(BatchNormalization()) model.add(Conv2D(filters=n_filter_1st_conv, activation=tf.nn.leaky_relu, kernel_size=(conv_kernel_sizes, conv_kernel_sizes), padding='same', strides=(1, 1), kernel_initializer='he_normal', bias_initializer='he_normal', kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2), activity_regularizer=regularizers.l1_l2(l1=l1, l2=l2))) for n_filters in conv_n_filter: model.add(Conv2D(filters=n_filters, activation=tf.nn.leaky_relu, kernel_size=(conv_kernel_sizes, conv_kernel_sizes), padding='same', strides=(1, 1), kernel_initializer='he_normal', bias_initializer='he_normal', kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2), activity_regularizer=regularizers.l1_l2(l1=l1, l2=l2))) model.add(MaxPooling2D(pool_size=(4, 2))) model.add(Dropout(dropout)) model.add(Flatten()) model.add(Dense(n_params_1st_dense, activation=tf.nn.leaky_relu, kernel_initializer='he_normal', bias_initializer='he_normal', kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2), activity_regularizer=regularizers.l1_l2(l1=l1, l2=l2))) model.add(Dropout(dropout)) for layer_sizes_2 in dense_layer_sizes: model.add(Dense(layer_sizes_2, activation=tf.nn.leaky_relu, kernel_initializer='he_normal', bias_initializer='he_normal', kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2), activity_regularizer=regularizers.l1_l2(l1=l1, l2=l2))) model.add(Dense(1, activation='sigmoid', kernel_initializer='he_normal', bias_initializer='he_normal')) model.compile(loss=tf.keras.losses.BinaryCrossentropy(), optimizer=Adam(learning_rate=lr), metrics=[tf.keras.metrics.BinaryCrossentropy(), tf.keras.metrics.Accuracy(), tf.keras.metrics.BinaryAccuracy(), tf.keras.metrics.AUC()]) return modelClassification_model = KerasClassifier(build_fn=create_model)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=rand_st)parameters = { 'n_filter_1st_conv': [16], 'conv_kernel_sizes': [2], 'conv_n_filter': [(16, 32, 64)], 'n_params_1st_dense': [1000], 'dense_layer_sizes': [(64, 8)], 'lr': [1e-3], 'dropout': [0.25], 'l1': [1e-3], 'l2': [1e-3], 'batch_size': [64], 'epochs': [100],}grid_search = GridSearchCV(estimator=Classification_model, param_grid=parameters, refit=False, scoring='accuracy', return_train_score=True, cv=2, error_score="raise")with tf.device('/GPU:1'): grid_search = grid_search.fit(X_train, y_train, verbose=1)# gridesearch 결과print("최고의 파라미터 :", grid_search.best_params_)print("최고 평균 accuracy : ", grid_search.best_score_) (문제를 해결하기 위해 cv=2로 두고, parameter들을 하나씩 하여 단순화해두었습니다. ) CV가 진행 중에는 아래와 같이 accuracy와 auc가 높게 나오다가, CV 1/2 Epoch 100/100 2/2 [==============================] - 0s 8ms/step - loss: 34.9196 - binary_crossentropy: 0.3310 - accuracy: 0.0000e+00 - binary_accuracy: 0.9829 - auc: 0.9911 CV 2/2 Epoch 100/100 2/2 [==============================] - 0s 10ms/step - loss: 38.7264 - binary_crossentropy: 0.3268 - accuracy: 0.0000e+00 - binary_accuracy: 0.9744 - auc_1: 0.9958 CV가 끝난 후 grid_search.best_score_로 accuracy를 뽑을 때는 아래처럼 낮은 accuracy가 나오는 것을 확인하였습니다. 최고 평균 accuracy : 0.6196581196581197 제가 알기로는 best_score_는 metric에 지정된 값에 대한 평균이라고 알고있는데.. 제가 생각하기로는 1. model compile에 넣어준 Keras loss 및 Keras metric과 GridsearchCV에서 사용하는 sklearn metric이 작동하는 방식이 달라 생기는 문제 2. CV부분에서 출력되는 loss와 metric들이 training set의 것 이라서 일어나는 게 아닐까 생각만 하고 있는데, 혹시 왜 이런 일이 일어나는지 알고계시는 분 계시면 답변 부탁드립니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
MMDetection To TensorRT 를 사용시 Mask_RCNN Dimension 문제가 발생합니다 ㅠㅠ
안녕하세요. 선생님의 MMDetection 강의를 보고 여러가지 만들어보고 있는 학생입니다. 다름이 아니고 mask_rcnn에 tensorrt를 적용해보고자 하여 mmd to tensorrt 라는 github를 발견하고 사용해보았습니다. https://github.com/grimoire/mmdetection-to-tensorrt 일단 설치하고 모델 적용을 하는데 기본값으로 모델을 변환하고 추론하면 추론이 되긴 하는데 segm 가 빠진 bbox만 검출이 됩니다. 그리고 파라미터를 수정해서 seg trt_model = mmdet2trt( cfg_path, args.checkpoint, fp16_mode=args.fp16, device=args.device, enable_mask=True, opt_shape_param=opt_shape_param, output_names=["num_detections", "boxes", "scores", "classes", "masks"] ) 요런식으로 만들어 모델을 돌려보면 IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)가 가 계속 뜨는데요. 혹시 도움주실수 있을까 하여 작성했습니다. 좋은 강의 감사히 보고있습니다. 감사합니다.
-
미해결
Tensorflow checkpoint 기능 활용 방법
안녕하세요 딥러닝을 구글colab을 이용하여 공부중인데 현재 이미지 학습 부분을 공부하고 있습니다. 하지만 결제를 하여도 런타임이 24시간이 한계라 훈련이 자꾸 중단되어 epoch를 전부 학습하지 못하고 있습니다! 그래서 1epoch마다 checkpoint를 저장하는 방법을 사용하여 훈련을 하고 있고, 현재 잘 저장이 되고 있습니다. 하지만 저는 항상 3/10 epoch에서 24시간이 지나 훈련이 중단 되는데 그러면 이때 3 까지 저장된 checkpoint를 불러와서 다시 4epoch부터 재 학습을 시킬수 있는방법이 궁금합니다! 검색을 해 보았지만 전부 학습이 완료된 데이터를 불러오는 예제 밖에 없어서 질문 남깁니다! 제가 사용한 코드는 아래와 같습니다. from fastai.imports import * from tensorflow.keras import datasets, layers, models, losses, Model from tensorflow import keras import tensorflow as tf from keras.layers import Dense,Dropout,Activation,Add,MaxPooling2D,Conv2D,Flatten,BatchNormalization from keras.models import Sequential from keras.preprocessing.image import ImageDataGenerator from keras import layers import seaborn as sns from keras.preprocessing import image import numpy as np import cv2 from google.colab.patches import cv2_imshow import matplotlib.pyplot as plt plt.style.use('seaborn-white') data_path = '/content/drive/MyDrive/train_val_data' train_dir = os.path.join(data_path,'train') val_dir = os.path.join(data_path,'test') classes = os.listdir(train_dir) train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( width_shift_range = 0.2, height_shift_range = 0.2, zoom_range = 0.2, vertical_flip=True, rescale = 1. / 255, fill_mode='nearest') val_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale = 1. / 255) train_generator = train_datagen.flow_from_directory( train_dir, target_size=(224,224), batch_size = 32, class_mode = 'categorical' ) val_generator = val_datagen.flow_from_directory( val_dir, target_size=(224,224), batch_size = 32, class_mode = 'categorical' ) base_model = tf.keras.applications.ResNet50(weights = 'imagenet', include_top = False, input_shape = (224,224,3)) for layer in base_model.layers: layer.trainable = False x = layers.Flatten()(base_model.output) x = layers.Dense(720, activation='relu')(x) predictions = layers.Dense(360, activation = 'softmax')(x) opt = tf.keras.optimizers.Adam(learning_rate=0.001) checkpoint_path = "/content/drive/MyDrive/training_resnet50/resnet50_cp.ckpt" checkpoint_dir = os.path.dirname(checkpoint_path) # 체크포인트 콜백 만들기 cp_callback = tf.keras.callbacks.ModelCheckpoint(checkpoint_path, save_weights_only=True, verbose=1) head_model = Model(inputs = base_model.input, outputs = predictions) head_model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy']) history = head_model.fit(train_generator, validation_data=val_generator, batch_size=32, epochs=100, callbacks = [cp_callback])