수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
Convolution Implementation 강좌 내용 질문있습니다
conv_manual conv_tf의 결과 아래와 같이 값이 조금 다른것을 알 수 있었는데요. conved manual : [[-1.29826343 -0.45550093 -0.45550093] [-0.27580023 -1.49220681 -1.49220681] [-0.27580023 -1.49220681 -1.49220681]] conved tf: [[-1.2982634 -0.45550087 0.05601658] [-0.2758004 -1.4922069 1.5845851 ] [-1.7049563 -0.3575049 2.2736065 ]] (강의 영상도 동일) 혹시 해당 이유 알 수 있을까요? 강의 영상 너무 잘 듣고 정말 큰 도움되고 있습니다. 감사합니다.
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
learning_env_setting1 질문
글을 수정한다는게 그만 삭제를 눌러 질문이 사라졌네요 ㅜㅜ 올려주신 답변은 잘 봤습니다. 제가 제 방식대로 수정해보겠습니다. 그리고 다음 강의를 수강하니 그 부분에 대한 수정이 나와 제가 성급하게 질문을 한 거 같아서 부끄럽네요. 항상 빠른 답변 감사합니다.
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
learning_env_setting1 질문
삭제된 글입니다
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
강사님, 4개의 질문 드립니다.
질문 1. 해결했습니당 질문 2. 질문 1과 같은 강의(마지막 챕터 Utility Functions - 3 More Utils) 3분 37초 부분에 train_validation_test.py 안의 line 56의 코드인 loss, acc = metric_objects['test_loss'].result().numpy(), metric_objects['test_acc'].result() 에서, .result()의 역할을 모르겠습니다.. result()라는 함수는 구글링을 해도 명확하게 나오지 않아 강사님께서 따로 define하신건가 싶어 찾아봤지만 찾질 못했습니다. 혹시 제가 define 부분을 찾지 못한건가요?ㅠㅠ 그것이 아니라면 .result()의 호출은 어떤 동작을 하게 해주는지 궁금합니다. 질문 3. 질문 2와 같은 line 코드에 대해서 질문 드립니다. 코드를 돌리면 loss, acc = metric_objects['test_loss'].result().numpy(), metric_objects['test_acc'].result() 라인에서 AttributeError: 'Tensor' object has no attribute 'numpy' 라는 에러 메시지를 받았습니다. 혹시 강사님께서도 이 부분에 대해서 어려움을 겪으신 경험이 있신지 궁금해서 질문 드립니다. // 검색을 통해 얻은 해결방법인 tf.enable_eager_execution()를 코드에 포함했을때는 AttributeError: module 'tensorflow' has no attribute 'enable_eager_execution' 를 확인했습니다. // @tf.function는 포함된 코드입니다. 질문 4. 해결했습니당 항상 양질의 강의를 올려주셔서 감사합니다. 강사님께서 인프런, 패스트캠퍼스, 애듀캐스트에 올려주신 강의는 Lenet 빼고는 다 들은 것 같습니다. 감사합니다!
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
강의 감사합니다. 질문 드립니다.
혹시 마지막 강의에서 말씀하신 confustion_matrix_visualization.npz, confustion_matrix_visualization.png를 구현하는 것에 대한 강의는 계획에 없으신가요?
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
강사님! 두 가지 질문 드립니다.
utility Functions - 3 More Utils 강의의 load_pocessing_mnist 함수 def 부분에서 질문이 있습니다. 1. tfds.load를 통해 dataset을 받아오고 property에서 split = ['train', 'test']을 설정하면 (train_validation_ds, test_ds) 각각에 저장되는 비율은 어느정도인가요? ex) 5:5 또는 7:3 2. line 34~36 train_ds = train_validation_ds.take(n_train) remaining_ds = train_validation_ds.skip(n_train) validation_ds = remaining_ds.take(n_validation) 부분에서 take() 는 train_validation_ds 안에서 n_train의 개수만큼 return하는 skip() 은 train_validation_ds 안의 (전체 개수 - n_train) 개수만큼 return하는 함수로 알고 있었습니다. 제가 배운 것이 맞다면 remaining_ds = train_validation_ds.skip(n_train) 이거는 validation_ds = remaining_ds.take(n_validation) 이거와 같지 않나요? ex) if n_train == 45000, n_validation == 15000 : num examples of remaining_ds == 15000 then, validation_ds = remaining_ds.take(n_validation) validation_ds == remaining_ds ??? 강사님의 여러 강의를 보고 열공하고 있습니다. 항상 감사합니다.
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
sequential 함수를 못불러 옵니다
안녕하세요. CNN 강의 중 구현강의를 따라하는데 자꾸 에러가 나서 문의드립니다.. class 선언하고, feature extractor 부분 똑같이 따라했는데요, self.fe = Sequential() self.fe.add(Conv2D(....)) 이런식으로 분명 똑같이 해봤거든요..? 그런데 모델 빌드하면 no attribute 'fe' 에러메세지가 뜹니다.. 왜그럴까요?ㅠㅠ 구현강의 너무 좋아요.. 감사합니다!
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
convolution, correlation 연산에 대한 질문
딥러닝에 대한 내용은 아니지만 강의를 듣다가 궁금한 점이 생겨 질문을 남깁니다. 강의 4:37에 나온 장면을 보면 서로 다른 두 신호가 들어오고 이를 filter와 correlation연산을 하는 것을 볼 수 있습니다. 그런데 단순히 신호와 filter의 element-wise 곱을 하게 되면 서로 다른 신호에 대한 correlation 값이 같아짐을 볼 수 있는데요 여기서 질문이 있습니다. 만약 특정 신호가 전부 1이라면 강의노트에 나온 연산에 따르면 convolution, correlation 모두 신호와 필터가 일치하게 된다고 인식한다고 생각합니다. 1) 강의에서 나온 것과 같이 서로 다른 신호지만 sum이 같은 경우, 2) 특정 신호가 1로만 이루어진 경우 이런 경우 어떻게 처리를 하는지 궁금합니다.
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
tf.keras.models.load_model () 함수 질문
model.save('경로') 를 통해 학습시킨 모델을 저장하는 것은 작동이 잘 되는 것을 확인했습니다만... 이미 저장되어 있는 모델을 load_model()함수를 통해 불러오기 할 때 아래와 같은 ValueError 가 발생하는 이유가 무엇인지 알수 있을지요? 아무래 해봐도 저는 아래와 같은 예외가 발생하면서 불러오기가 실패합니다. 구글 검색을 하다보면 Input shape 을 설정해 주면 해결된다는 답글이 있는 것도 같은데 subclassing 으로 모델 정의할 때 각 layer 별로 Input shape 을 계산해서 넣어주어야지만 load_model 기능을 사용할 수 있는건 아닐것 같은데... 답답하네요~~ 제가 GTX970 으로 GPU 텐서플로우를 돌리려 하다보니 최신 버전은 GPU 가 안먹혀서 tensorflow 2.1 / CUDA10.1 을 설치해서 실습 따라오고 있었는데.... 혹시 tensorflow 나 CUDA버전에 따른 차이인 것일지요? ValueError: Could not find matching function to call loaded from the SavedModel. Got: Positional arguments (2 total): * Tensor("x:0", shape=(None, 28, 28, 1), dtype=float32) * Tensor("training:0", shape=(), dtype=bool) Keyword arguments: {} Expected these arguments to match one of the following 4 option(s): Option 1: Positional arguments (2 total): * TensorSpec(shape=(None, 28, 28, 1), dtype=tf.float32, name='x') * False Keyword arguments: {} Option 2: Positional arguments (2 total): * TensorSpec(shape=(None, 28, 28, 1), dtype=tf.float32, name='x') * True Keyword arguments: {} Option 3: Positional arguments (2 total): * TensorSpec(shape=(None, 28, 28, 1), dtype=tf.float32, name='input_1') * True Keyword arguments: {} Option 4: Positional arguments (2 total): * TensorSpec(shape=(None, 28, 28, 1), dtype=tf.float32, name='input_1') * False Keyword arguments: {}===== 아래는 full code 입니다. ==== import numpy as np import matplotlib.pyplot as plt from termcolor import colored import tensorflow as tf import tensorflow_datasets as tfds from tensorflow.keras.models import Model, Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Activation, Dropout from tensorflow.keras.losses import SparseCategoricalCrossentropy from tensorflow.keras.optimizers import Adam, SGD from tensorflow.keras.metrics import Mean, SparseCategoricalAccuracy # from utils.learning_env_setting import dir_setting, get_classification_matrics, save_metics_model, continue_setting # data pre processing def get_mnist_dataset_and_normalize(ratio, n_batch_train, n_batch_test): def normalization(images, labels): images = tf.cast(images, tf.float32)/255 labels = tf.cast(labels, tf.int32) return images, labels (train_validation_ds, test_ds), ds_info = tfds.load(name='mnist', as_supervised = True, shuffle_files = True, with_info = True, split = ['train', 'test']) n_train_validation = ds_info.splits['train'].num_examples n_train = int(ratio * n_train_validation) n_validation = n_train_validation - n_train train_ds = train_validation_ds.take(n_train) validation_ds = train_validation_ds.skip(n_train) train_ds = train_ds.map(normalization).shuffle(n_train).batch(n_batch_train) validation_ds = validation_ds.map(normalization).batch(n_batch_train) test_ds = test_ds.map(normalization).batch(n_batch_test) return train_ds, validation_ds, test_ds class CNN_Model(Model): def __init__(self): super(CNN_Model, self).__init__() # feature extractor self.conv1 = Conv2D(filters=8, kernel_size=5, padding='same', activation='relu') self.conv1_maxpool = MaxPooling2D(pool_size=2, strides=2) self.conv2 = Conv2D(filters=8, kernel_size=5, padding='same', activation='relu') self.conv2_maxpool = MaxPooling2D(pool_size=2, strides=2) # Classifier self.flatten = Flatten() self.dense1 = Dense(units=64, activation='relu') self.dense1_dropout = Dropout(0.5) self.dense2 = Dense(units=10, activation='softmax') def call(self, x): x = self.conv1(x) x = self.conv1_maxpool(x) x = self.conv2(x) x = self.conv2_maxpool(x) x = self.flatten(x) x = self.dense1(x) x = self.dense2(x) return x @tf.function def trainer(): global model, loss_object, loss_train, acc_train, optimizer for images, labels in train_ds: with tf.GradientTape() as tape: predictions = model(images) loss = loss_object(labels, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) loss_train(loss) acc_train(labels, predictions) @tf.function def validation(): global model, loss_object, loss_validation, acc_validation for images, labels in validation_ds: predictions = model(images) loss = loss_object(labels, predictions) loss_validation(loss) acc_validation(labels, predictions) @tf.function def tester(): global model, loss_object, loss_test, acc_test for images, labels in test_ds: predictions = model(images) loss = loss_object(labels, predictions) loss_test(loss) acc_test(labels, predictions) EPOCHS = 10 n_batch_train = 32 n_batch_test = 128 ratio = 0.8 train_ds, validation_ds, test_ds = get_mnist_dataset_and_normalize(ratio, n_batch_train, n_batch_test) model = CNN_Model() model.compile(optimizer='adam',loss = 'sparse_categorical_crossentropy', metrics =['accuracy']) history = model.fit(train_ds, validation_data=validation_ds, epochs=EPOCHS) loss_object = SparseCategoricalCrossentropy() loss_test = Mean() acc_test = SparseCategoricalAccuracy() def tester(): global model, loss_object, loss_test, acc_test for images, labels in test_ds: predictions = model(images) loss = loss_object(labels, predictions) loss_test(loss) acc_test(labels, predictions) tester() print(colored('TEST','cyan','on_white')) print("Test Loss : {:.4f} / Test Accuracy : {:.2f}".format(loss_test.result(), acc_test.result()*100)) model.save('MyModel') model1 = tf.keras.models.load_model('MyModel') def tester(): global model1, loss_object, loss_test, acc_test for images, labels in test_ds: predictions = model1(images) loss = loss_object(labels, predictions) loss_test(loss) acc_test(labels, predictions) tester() print(colored('TEST','cyan','on_white')) print("Test Loss : {:.4f} / Test Accuracy : {:.2f}".format(loss_test.result(), acc_test.result()*100))
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
@tf.function 데코레이터 사용시 ValueError 문제 질문
안녕하세요? 알찬 교육에 정말 감사드립니다. trainer(), validation(), tester() 함수를 정의해서 학습을 시킬때... 그냥 학습시키면 작동이 되는데, @tf.function 데코레이터만 붙여서 사용하면 ValueError 예외가 발생하는데요, 집의 컴퓨터에서 돌릴때와 코랩에서 돌릴 때 동일한 issue 가 생깁니다. 만약 for epoch in range(EPOCHS): 이후의 코드 대신에 model.compile(optimizer='adam',loss = 'sparse_categorical_crossentropy', metrics =['accuracy']) history = model.fit(train_ds, validation_data=validation_ds, epochs=EPOCHS) 와 같이 model.compile 이나 model.fit 을 통해서 학습시키는 경우에는 @tf.function 데코레이터가 제대로 작동합니다; 제가 만든 아래 코드 중에서 뭐가 문제일까요?? ㅠㅠ 그리고 학습 데이터 뿐아니라 validation 이나 test data 도 100% 예측성능이 나와서 제대로 한것이 맞나도 모르겠네요 ㅠㅠ 코드를 한번 점검해 주실 수 있으실지.... 문의 드립니다. --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-1-896c4f98ef4d> in <module>() 120 121 for epoch in range(EPOCHS): --> 122 trainer() 123 validation() 124 8 frames /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs) 975 except Exception as e: # pylint:disable=broad-except 976 if hasattr(e, "ag_error_metadata"): --> 977 raise e.ag_error_metadata.to_exception(e) 978 else: 979 raise ValueError: in user code: <ipython-input-1-896c4f98ef4d>:91 trainer * for images, labels in train_ds: /usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/operators/control_flow.py:424 for_stmt iter_, extra_test, body, get_state, set_state, symbol_names, opts) /usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/operators/control_flow.py:719 _tf_dataset_for_stmt _verify_loop_init_vars(init_vars, symbol_names) /usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/operators/control_flow.py:193 _verify_loop_init_vars raise ValueError(error_msg) ValueError: 'predictions' must be defined before the loop. --- 아래 부터 full code 입니다 --- import numpy as np import matplotlib.pyplot as plt from termcolor import colored import tensorflow as tf import tensorflow_datasets as tfds from tensorflow.keras.models import Model, Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Activation, Dropout from tensorflow.keras.losses import SparseCategoricalCrossentropy from tensorflow.keras.optimizers import Adam, SGD from tensorflow.keras.metrics import Mean, SparseCategoricalAccuracy # data pre processing def get_mnist_dataset_and_normalize(ratio, n_batch_train, n_batch_test): def normalization(images, labels): images = tf.cast(images, tf.float32)/255 labels = tf.cast(labels, tf.int32) return images, labels (train_validation_ds, test_ds), ds_info = tfds.load(name='mnist', as_supervised = True, shuffle_files = True, with_info = True, split = ['train', 'test']) n_train_validation = ds_info.splits['train'].num_examples n_train = int(ratio * n_train_validation) n_validation = n_train_validation - n_train train_ds = train_validation_ds.take(n_train) validation_ds = train_validation_ds.skip(n_train) train_ds = train_ds.map(normalization).shuffle(1000).batch(n_batch_train) validation_ds = validation_ds.map(normalization).batch(n_batch_train) test_ds = test_ds.map(normalization).batch(n_batch_test) return train_ds, validation_ds, test_ds # hyper parameter 와 인스턴스 정의 EPOCHS = 10 n_batch_train = 32 n_batch_test = 32 ratio = 0.8 LR = 0.001 # 데이터 불러오기 train_ds, validation_ds, test_ds = get_mnist_dataset_and_normalize(ratio, n_batch_train, n_batch_test) class CNN_Model(Model): def __init__(self): super(CNN_Model, self).__init__() # feature extractor self.conv1 = Conv2D(filters=8, kernel_size=5, padding='same', activation='relu') self.conv1_maxpool = MaxPooling2D(pool_size=2, strides=2) self.conv2 = Conv2D(filters=8, kernel_size=5, padding='same', activation='relu') self.conv2_maxpool = MaxPooling2D(pool_size=2, strides=2) # Classifier self.flatten = Flatten() self.dense1 = Dense(units=64, activation='relu') self.dense1_dropout = Dropout(0.5) self.dense2 = Dense(units=10, activation='softmax') def call(self, x): x = self.conv1(x) x = self.conv1_maxpool(x) x = self.conv2(x) x = self.conv2_maxpool(x) x = self.flatten(x) x = self.dense1(x) x = self.dense1_dropout(x) x = self.dense2(x) return x # 각종 인스턴스 정의 model = CNN_Model() loss_object = SparseCategoricalCrossentropy() optimizer = Adam(learning_rate=LR) loss_train = Mean() loss_validation = Mean() loss_test = Mean() acc_train = SparseCategoricalAccuracy() acc_validation = SparseCategoricalAccuracy() acc_test = SparseCategoricalAccuracy() @tf.function def trainer(): # 하나의 epoch 내에서 학습데이터로 모델 학습시키는 함수 global model, loss_object, loss_train, acc_train, optimizer for images, labels in train_ds: with tf.GradientTape() as tape: predictions = model(images) loss = loss_object(labels, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) loss_train(loss) acc_train(labels, predictions) @tf.function def validation(): # 하나의 epoch 내에서 학습데이터로 모델 학습시키는 함수 global model, loss_object, loss_validation, acc_validation for images, labels in validation_ds: predictions = model(images) loss = loss_object(labels, predictions) loss_validation(loss) acc_validation(labels, predictions) @tf.function def tester(): # 하나의 epoch 내에서 학습데이터로 모델 학습시키는 함수 global model, loss_object, loss_test, acc_test for images, labels in test_ds: predictions = model(images) loss = loss_object(labels, predictions) loss_test(loss) acc_test(labels, predictions) for epoch in range(EPOCHS): trainer() validation() print(colored('Epoch','red','on_white'), epoch+1) print("Train Loss : {:.4f} / Train Accuracy : {:.2f}".format(loss_train.result(), acc_train.result()*100)) print("Validation Loss : {:.4f} / Validation Accuracy : {:.2f}".format(loss_validation.result(), acc_validation.result()*100)) loss_train.reset_states() loss_validation.reset_states() acc_train.reset_states() acc_validation.reset_states() tester() print(colored('TEST','cyan','on_white')) print("Test Loss : {:.4f} / Test Accuracy : {:.2f}".format(loss_test.result(), acc_test.result()*100)) 아래 결과가 @tf.function 를 지우고 돌렸을 때의 결과 입니다. 정상적으로 학습이 되는데Validation Accuracy 나 Test Accuracy 가 100% 로 나오는데... 원래 MNIST 정도의 데이터는 이렇게 잘 맞는 건가요?? ;; ================= Epoch 1 Train Loss : 0.2663 / Train Accuracy : 96.88 Validation Loss : 0.1054 / Validation Accuracy : 96.88 Epoch 2 Train Loss : 0.0721 / Train Accuracy : 100.00 Validation Loss : 0.0400 / Validation Accuracy : 100.00 Epoch 3 Train Loss : 0.0665 / Train Accuracy : 100.00 Validation Loss : 0.0373 / Validation Accuracy : 100.00 Epoch 4 Train Loss : 0.0575 / Train Accuracy : 96.88 Validation Loss : 0.0157 / Validation Accuracy : 100.00 Epoch 5 Train Loss : 0.1948 / Train Accuracy : 90.62 Validation Loss : 0.0192 / Validation Accuracy : 100.00 Epoch 6 Train Loss : 0.0520 / Train Accuracy : 96.88 Validation Loss : 0.0250 / Validation Accuracy : 100.00 Epoch 7 Train Loss : 0.0365 / Train Accuracy : 100.00 Validation Loss : 0.0134 / Validation Accuracy : 100.00 Epoch 8 Train Loss : 0.0342 / Train Accuracy : 100.00 Validation Loss : 0.0166 / Validation Accuracy : 100.00 Epoch 9 Train Loss : 0.0837 / Train Accuracy : 96.88 Validation Loss : 0.0062 / Validation Accuracy : 100.00 Epoch 10 Train Loss : 0.0166 / Train Accuracy : 100.00 Validation Loss : 0.0112 / Validation Accuracy : 100.00 TEST Test Loss : 0.0096 / Test Accuracy : 100.00
- 미해결커피 한 잔으로 입문하는 Convolutional Neural Network
LeNet 구조에 대해서 질문이 있습니다
안녕하세요 Convolution for multi channel-input 강의를 보고 나서 질문이 있습니다 계속 강의에 나오는 LeNet 구조에서, 처음에 MNIST 데이터가 들어가 6개의 필터를 거쳐서 나오는 6개의 feature map까지 이해를 했습니다. 그런데, 여기서 다시 16개의 feature map으로 바뀌는데, 그러면 이때는 6개의 채널이 입력이 되었다고 가정하고 16개의 필터를 거쳐서 거기서 필터값의 합이랑 바이어스랑 합한 것이 총 16개로 나오는 것인가요? 즉 6개의 입력 채널이 한꺼번에 3-input(RGB)처럼 들어가는 것인지 궁금합니다 감사합니다