묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전 인공지능으로 이어지는 딥러닝 개념 잡기
다중레이어 경사하강법에서 질문
안녕하세요 강사님Loss 함수가 아닌 y_hat부터 미분 하는 이유가 뭔가요?W_11이 Loss의 결과에 미치는 영향을 알기 위해 Loss함수 부터 미분 해야 하지 않나요?? ㅠ
-
해결됨TensorFlow 2.0으로 배우는 딥러닝 입문
colab 환경에서 Autoencoder 구현하였으나 결과가 보이지 않는 분들 참고사항
colab 환경에서 Autoencoder를 구현하여 코드를 실행시키면 반복(Epoch)는 완료 되었는데, 결과 이미지가 확인이 되지 않는 경우가 생깁니다. 이런 경우 맨 아래의 plt.waitforbuttonpress()를 주석 처리하시면 빠르게 결과를 확인 할 수 있습니다.[plt.waitforbuttonpress()코드 주석처리][주석 처리 후 결과 확인]혹시나 제가 잘못알고 있는 사항이 있으면 바로 정정 부탁드리겠습니다.
-
미해결파이썬을 활용한 머신러닝 딥러닝 입문
DBSCAN 실습 결과
수업에서 DBSCAN 결과가 이렇게 내왔는데 그러면 OUTLIER도 파란색이고 모여있는데도 색깔이 다른 곳들이 있으니 학습이 잘 된 건 아닌 케이스일까요? 감사합니다!
-
미해결파이썬을 활용한 머신러닝 딥러닝 입문
DBSCAN 질문
늘 강의 잘 듣고 있습니다! DBSCAN에서 Radius(R)와 Minimum Neighbor number(M)을 가르쳐주시고 Core, Border 개념을 소개해주셨는데 헷갈리는 부분이 있어 질문 드립니다. pdf 자료를 보며 R에 2unit 이렇게 되어 있는데 이 Unit이라는 건 데이터 포인트의 점 크기를 말하는 걸까요? 그리고 정한 M 값 이상의 데이터 포인트들이 R 안에 들어오면 Core고 Border는 R안에 데이터포인트가 M 보다 작은 수만큼 있는 경우, 다른 Core가 R 안에 있는 경우를 말하는 건가요? (R안에 다른 데이터포인트가 하나라도 있으면 Border인지 궁금합니다)
-
해결됨실전 인공지능으로 이어지는 딥러닝 개념 잡기
XOR파트에서 입력표현 방식
안녕하세요 강사님 오랜만에 다시 복습중입니다.XOR문제 6:30쯤에 입력을 행렬로 만들어서 사용 하는데요그 전까지는 입력을 열벡터로 표현 했었는데 다수의 입력을 표현 할때는 왜 행벡터로 표현이 되었는지 궁금합니다.
-
미해결파이썬을 활용한 머신러닝 딥러닝 입문
Feature Scaling 강의 질문 있습니다!
(1) Feature scaling 실습 강의를 듣다가 궁금한 점이 있어 질문드립니다! 타이타닉 자료에서 나이에 대한 결측치는 중간값으로 처리하고, Embarked의 경우 drop을 하는 걸로 알려주셨는데요 🙂 원래 없는 값인데 중간 값으로 결측치를 채워주는 것도 그렇구 다른 FEATURE값이 있는데 결측치가 있는 row라고 지워버리는 것도 그렇고 결측치가 주는 영향이 그만큼 크기 때문인가요?? 값이 비어있는 것보다는 평균으로라도 채워놓는 게 좋은 건지, 다른 feature 정보가 있더라도 결측치가 있는 row는 지우는 게 좋은 건지 feature engineering에 대해 제대로 이해하지 못한 것 같아 여쭤봅니다! (2) SKEW된 FARE에 log를 취해주셨는데요! 사실 그래프만 보면 parch도 sibsb도 한 쪽으로 쏠려있고 한 쪽이 많은 느낌인데 왜 fare만 skew로 log를 취해주신 걸까요? (3) 교재에서는 train_test_split 부분을 이렇게 해주셨는데요! X_train = df_titanic[:700]X_test = df_titanic[700:]y_train = X_train.pop('Survived')y_test = X_test.pop('Survived')X_train, X_test에서 survived 부분을 안 빼줘도 되는 건가요?? 늘 감사합니다!!
-
미해결파이썬을 활용한 머신러닝 딥러닝 입문
heatmap에서 numeric_only=True
타이타닉 탑승자 자료로 Feature scaling을 실습하는 강의에서, heatmap을 그리는 부분을 듣고 있는데요!g=sns.heatmap(df_titanic.corr(numeric_only=True),annot=True,cmap='coolwarm') 교재에는 이렇게 되어 있는데 실제 강의에서는 numeric_only=True 부분을 작성하지 않고도 똑같이 그리셨더라구요! 교재 코드에 해당 부분이 있는 이유가 궁금해 여쭤봅니다! 감사합니다 :)
-
미해결파이썬을 활용한 머신러닝 딥러닝 입문
pd.Series
랜덤포레스트와 그래디언트부스팅 강의에서 마지막에 FEATURE importance를 pd.series로 하는 과정이 나오는데, 그래프를 그리기 전 이 과정이 왜 필요한 건가요? 감사합니다!
-
미해결파이썬을 활용한 머신러닝 딥러닝 입문
Feature Scaling
feature scaling에서 X_test는 fit_transform이 아니라 transform만 해야한다고 하셨는데요! (logistic regression 실습 18분 부근) 어차피 X_train과 평균과 표준편차가 동일할 거라는 건 이해가 되지만, 미래 값인 X_test의 평균/표준편차를 구할 순 없다는 말씀은 이해가 잘 되지 않습니다 ㅠㅠ, 그리고 어차피 동일하다면 X_test에 fit_transform을 해도 같은 결과가 나와야 하는 거 아닌가요? 늘 감사합니다!
-
미해결딥러닝을 활용한 자연어 처리 (NLP) 과정 (기초부터 ChatGPT/생성 모델까지)
Transformer 번역기 부분에 대해 질문 있습니다.
아래 사이트는 Encoder / Decoder를 하나의 Class로 만들었는데요..강사님도 해당 예제는 많이 보셨을거 같습니다.https://keras.io/examples/nlp/neural_machine_translation_with_transformer/ 아래와 같이 Encoder / Decoder Class를 선언하고..추가로 shape들을 찍어 보았습니다.(참고로 get_config 함수는 지면상 뺐습니다.)class TransformerEncoder(keras.layers.Layer): def init(self, num_heads, embed_dim, dense_dim, **kwargs): super().__init__(**kwargs) self.num_heads = num_heads self.embed_dim = embed_dim self.dense_dim = dense_dim self.class_name = 'TransformerEncoder' self.attention = keras.layers.MultiHeadAttention(self.num_heads, key_dim=self.embed_dim, value_dim=self.embed_dim) self.dense = keras.models.Sequential([keras.layers.Dense(self.dense_dim, activation='relu'), keras.layers.Dense(self.embed_dim)]) self.layer1 = keras.layers.LayerNormalization() self.layer2 = keras.layers.LayerNormalization() self.support_mask = True def call(self, inputs, mask=None): tf.print('ClassName=TransformerEncoder-------------------------------------------------------') if mask is not None: #print('ClassName={}, mask.shape={}'.format(self.class_name, mask.shape)) padding_mask = mask[:, tf.newaxis, :] tf.print('mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('mask=None') attention_out = self.attention(query=inputs, key=inputs, value=inputs, attention_mask=padding_mask) tf.print('input.shape=', inputs.shape) tf.print('attention_out.shape=', attention_out.shape) layer1_out = self.layer1(inputs+attention_out) #print('ClassName={}, layer1_out.shape={}'.format(self.class_name, layer1_out.shape)) dense_out = self.dense(layer1_out) tf.print('dense_out.shape=', dense_out.shape) return self.layer2(layer1_out+dense_out) class TransformerDecoder(keras.layers.Layer): def init(self, num_heads, embed_dim, latent_dim, **kwargs): super().__init__(**kwargs) self.num_heads = num_heads self.embed_dim = embed_dim self.latent_dim = latent_dim self.class_name = 'Decoder' self.attention_1 = keras.layers.MultiHeadAttention(num_heads=self.num_heads, key_dim=self.embed_dim) self.attention_2 = keras.layers.MultiHeadAttention(num_heads=self.num_heads, key_dim=self.embed_dim) self.layer_1 = keras.layers.LayerNormalization() self.layer_2 = keras.layers.LayerNormalization() self.layer_3 = keras.layers.LayerNormalization() self.dense = keras.models.Sequential([keras.layers.Dense(self.latent_dim, activation='relu'), keras.layers.Dense(self.embed_dim)]) self.supports_masking=True def call(self, inputs, encoder_outputs, mask=None): tf.print('ClassName=TransformerDecoder-------------------------------------------------------') #inputs.shape=(None, 35, 32), encoder_outputs.shape=(None, 35, 32) #tf.print('aaaaaaaaa=', inputs.shape) casual_mask = self.get_casual_attention_mask(inputs) tf.print('inputs.shape=', inputs.shape) tf.print('casual_mask.shape=', casual_mask.shape) if mask is not None: padding_mask = tf.cast(mask[:, None, :], dtype='int32') padding_mask = tf.minimum(padding_mask, casual_mask) tf.print('padding_mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('padding_mask = None') attention_1_out = self.attention_1(query=inputs, key=inputs, value=inputs, attention_mask=casual_mask) tf.print('attention_1_out.shape=', attention_1_out.shape) layer_1_out = self.layer_1(inputs+attention_1_out) attention_2_out = self.attention_2(query=layer_1_out, key=encoder_outputs, value=encoder_outputs, attention_mask=padding_mask) layer_2_out = self.layer_2(layer_1_out + attention_2_out) dense_out = self.dense(layer_2_out) tf.print('dense_out.shape=', dense_out.shape) return self.layer_3(layer_2_out + dense_out) def get_casual_attention_mask(self, inputs): #input_shape=(2, 35, 32) =(BatchSize, Sequence_len, Embed_Len) input_shape = tf.shape(inputs) batch_size, sequence_length = input_shape[0], input_shape[1] #i=(35, 1), j=(35,) #i=[[0], [1], [2], ... [35]], j=[0 1 2 ... 34] i = tf.range(start=0, limit=sequence_length)[:, tf.newaxis] j = tf.range(start=0, limit=sequence_length) # tf.cast 함수는 보통 조건에 따른 True, False 의 판단 기준에 따라 True 면 1, False 면 0을 반환한다. # mask.shape=(1, 35, 35), mask=[[[1 0 0 .. 0], [1 1 0 0 ...0], [1 1 1 1 ...1 0], [1 1 1 1 ... 1 1]]] mask = tf.cast(i>=j, dtype='int32') mask = tf.reshape(mask, (1, input_shape[1], input_shape[1])) # mult = (2, 1, 1), (BatchSize, 1, 1) mult = tf.concat([tf.expand_dims(batch_size, -1), tf.convert_to_tensor([1,1])], axis=0) return tf.tile(mask, mult) MAX_EMBED=32 MAX_VOCAB=5000 MAX_SEQ = 35 MAX_DENSE=1024 MAX_HEAD=1 encoder_inputs = keras.layers.Input(shape=(MAX_SEQ,), dtype='int64', name='encoder_inputs') encoder_embed_outs = PositionalEmbedding(MAX_SEQ, MAX_VOCAB, MAX_EMBED)(encoder_inputs) encoder_transformer_outs = TransformerEncoder(num_heads=1, embed_dim=MAX_EMBED, dense_dim=MAX_DENSE)(encoder_embed_outs) #encoder_transformer_outs == (None, 80, 256) decoder_inputs = keras.layers.Input(shape=(MAX_SEQ,), dtype='int64', name='decoder_inputs') decoder_embed_outs = PositionalEmbedding(MAX_SEQ, MAX_VOCAB, MAX_EMBED)(decoder_inputs) #decoder_embed_outs == (None, 80, 256) decoder_transformer_outs = TransformerDecoder(1, MAX_EMBED, MAX_DENSE)(decoder_embed_outs, encoder_transformer_outs) decoder_dropout_outs = keras.layers.Dropout(0.5)(decoder_transformer_outs) decoder_outputs = keras.layers.Dense(MAX_VOCAB, activation='softmax')(decoder_dropout_outs) model = keras.Model(inputs=[encoder_inputs, decoder_inputs], outputs=decoder_outputs) model.summary() 호출(호출은 Log만 찍어보게 BatchSize를 줄였습니다.)q_train_seqs = q_seqs[:2] a_train_seqs = a_seqs[:2] print(q_train_seqs.shape, a_train_seqs.shape) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit([q_train_seqs, a_train_seqs[:, :-1]], a_train_seqs[:, 1:], epochs=1) 이렇게 해서 돌리면 결과가 아래와 같이 찍힙니다.ClassName=TransformerEncoder------------------------------------------------------- mask=None input.shape= TensorShape([None, 35, 32]) attention_out.shape= TensorShape([None, 35, 32]) dense_out.shape= TensorShape([None, 35, 32]) ClassName=TransformerDecoder------------------------------------------------------- inputs.shape= TensorShape([None, 35, 32]) casual_mask.shape= TensorShape([None, 35, 35]) padding_mask = None attention_1_out.shape= TensorShape([None, 35, 32]) dense_out.shape= TensorShape([None, 35, 32]) 1/1 [==============================] - 4s 4s/step - loss: 8.2735 - accuracy: 0.0000e+00 질문은 아래와 같습니다.Encoder 파트에서 mask=None 으로 Mask가 들어있지 않습니다. 그럼 굳이 mask는 구현할 필요가 없는건지? Decoder 파트에서는 첫번째 Self-Attention 부분에서만 제대로된 마스킹 값이 들어가고 Encoder의 Key와 매핑 시키는 부분에서는 마찬가지로 padding_mask가 None 입니다. 이 부분에 대해 조금 더 자세한 설명을 해 주시면 감사하겠습니다. 다시 한번 설명 드리면class TransformerEncoder(keras.layers.Layer): ... def call(self, inputs, mask=None): tf.print('ClassName=TransformerEncoder-------------------------------------------------------') if mask is not None: #print('ClassName={}, mask.shape={}'.format(self.class_name, mask.shape)) padding_mask = mask[:, tf.newaxis, :] tf.print('mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('mask=None') #Encoder 에서 padding_mask는 None으로 찍힘 attention_out = self.attention(query=inputs, key=inputs, value=inputs, attention_mask=padding_mask) class TransformerDecoder(keras.layers.Layer): def call(self, inputs, encoder_outputs, mask=None): casual_mask = self.get_casual_attention_mask(inputs) #mask는 None 으로 들어옴 if mask is not None: padding_mask = tf.cast(mask[:, None, :], dtype='int32') padding_mask = tf.minimum(padding_mask, casual_mask) else: padding_mask = None # casual_mask는 현재 위치 이후는 0 으로 패딩 된 것 확인 attention_1_out = self.attention_1(query=inputs, key=inputs, value=inputs, attention_mask=casual_mask) layer_1_out = self.layer_1(inputs+attention_1_out) # 하지만 padding_mask는 None 임 attention_2_out = self.attention_2(query=layer_1_out, key=encoder_outputs, value=encoder_outputs, attention_mask=padding_mask) layer_2_out = self.layer_2(layer_1_out + attention_2_out)
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 1 - Llama 2 Fine-Tuning 해보기
코렙 강의 자료 위치
코렙 강의 파일을 찾을 수 없다는데 어떻게 해야되나요? 죄송합니다. 요청한 파일이 없습니다.올바른 URL을 사용하고 있는지와 파일이 존재하는지 확인하세요. 이렇게 떠요!
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
positional embedding 학습이 잘 안되는 문제
cifar10 말고 다른 이미지셋을 가지고 학습을 시켜보았는데, 시각화를 해 보니 수업에서 보여주셨던 것과는 다르게 positional embedding 학습이 잘 안되었습니다. 어디를 봐야할지 조언을 부탁드려도 될까요?
-
해결됨Google 공인! 텐서플로(TensorFlow) 개발자 자격증 취득
슬랙 초대 및 진행 방법 알려주시면 감사드립니다
hyunoo9495@gmail.com질문 및 실전 문제를 받고 싶어서 그런데 슬랙 초대 부탁 드립니다. 그리고 슬랙 초대 이후 진행방법이 어떻게 되는지도 안내 부탁 드립니다!
-
해결됨Google 공인! 텐서플로(TensorFlow) 개발자 자격증 취득
강의자료 찾기가 너무 힘들어요 메일로 부탁드립니다.
강의자료 찾기가 너무 힘들어요 메일로 부탁드립니다.회사 pc가 폐쇄망으로 구글 드라이브가 실행되지 않아 파일을 볼수가 없습니다. loveday3579@naver.com
-
해결됨파이썬을 활용한 머신러닝 딥러닝 입문
categorical 변수의 수치화
강의 중에 성별의 경우 성별이라는 COLUMN에 여자는 0, 남자는 1 이런식으로 하면 안 되고 여자 칼럼/남자 칼럼을 나눠줘야 한다고 하셨는데 그 이유가 뭔지 질문 드립니다! 대소관계가 없도록 하는 거라고 하셨는데, 잘 이해가 되지 않아서요! 또 그럼 반대로 ordinal category의 경우 사이즈라는 칼럼을 만들어서 L은 3, m은 2, s는 1로 한 번에 넣어도 괜찮은 건가요? 늘 감사합니다, 강사님!
-
해결됨파이썬을 활용한 머신러닝 딥러닝 입문
Residual Error
앙상블의 boosting에 대해 듣던 중 질문이 있어 글을 남깁니다! residual error를 실제 값과 예측값의 차이라고 이해했는데, 검색해보니 단순 error와는 조금 다른 말이라는 이야기가 많아서요. 혹시 error와 residual error에 차이가 있나요?
-
해결됨TensorFlow 2.0으로 배우는 딥러닝 입문
Mnist 에 keras를 통해 softmax를 활용한 regerssion error 발생
안녕하세요. windows 환경에서 코드를 실행시키고 있는데 error가 발생해서 문의 드립니다. 코드는 제가 전혀 손대지 않아서 강사님이 공유해 주신 그대로의 코드 입니다. [mnist_classification_using_softmax_regression_v2_keras.py 코드]# -*- coding: utf-8 -*- import tensorflow as tf # MNIST 데이터를 다운로드 합니다. (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # 이미지들을 float32 데이터 타입으로 변경합니다. x_train, x_test = x_train.astype('float32'), x_test.astype('float32') # 28*28 형태의 이미지를 784차원으로 flattening 합니다. x_train, x_test = x_train.reshape([-1, 784]), x_test.reshape([-1, 784]) # [0, 255] 사이의 값을 [0, 1]사이의 값으로 Normalize합니다. x_train, x_test = x_train / 255., x_test / 255. # 레이블 데이터에 one-hot encoding을 적용합니다. y_train, y_test = tf.one_hot(y_train, depth=10), tf.one_hot(y_test, depth=10) # tf.data API를 이용해서 데이터를 섞고 batch 형태로 가져옵니다. train_data = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_data = train_data.repeat().shuffle(60000).batch(100) train_data_iter = iter(train_data) # tf.keras.Model을 이용해서 Softmax Regression 모델을 정의합니다. class SoftmaxRegression(tf.keras.Model): def __init__(self): super(SoftmaxRegression, self).__init__() self.softmax_layer = tf.keras.layers.Dense(10, activation=None, kernel_initializer='zeros', bias_initializer='zeros') def call(self, x): logits = self.softmax_layer(x) return tf.nn.softmax(logits) # cross-entropy 손실 함수를 정의합니다. @tf.function def cross_entropy_loss(y_pred, y): return tf.reduce_mean(-tf.reduce_sum(y * tf.math.log(y_pred), axis=[1])) #return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logtis, labels=y)) # tf.nn.softmax_cross_entropy_with_logits API를 이용한 구현 # 최적화를 위한 그라디언트 디센트 옵티마이저를 정의합니다. optimizer = tf.optimizers.SGD(0.5) # 최적화를 위한 function을 정의합니다. @tf.function def train_step(model, x, y): with tf.GradientTape() as tape: y_pred = model(x) loss = cross_entropy_loss(y_pred, y) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) # 모델의 정확도를 출력하는 함수를 정의합니다. @tf.function def compute_accuracy(y_pred, y): correct_prediction = tf.equal(tf.argmax(y_pred,1), tf.argmax(y,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) return accuracy # SoftmaxRegression 모델을 선언합니다. SoftmaxRegression_model = SoftmaxRegression() # 1000번 반복을 수행하면서 최적화를 수행합니다. for i in range(1000): batch_xs, batch_ys = next(train_data_iter) train_step(SoftmaxRegression_model, batch_xs, batch_ys) # 학습이 끝나면 학습된 모델의 정확도를 출력합니다. print("정확도(Accuracy): %f" % compute_accuracy(SoftmaxRegression_model(x_test), y_test)) # 정확도 : 약 91% 그리고 해당 코드가 있는 곳에 python으로 실행을 시키면 아래와 같은 결과가 나옵니다....(중략)...--> TypeError: unhashable type: 'list' 라는 에러가 발생하고 있습니다.--> 여러 사이트 검색과 코드 변경으로 문제 해결을 시도 하였으나 해결이 되지 않아서 어떻게 해결해야 하는지 가르쳐 주시면 감사하겠습니다. [에러 화면 전체 이미지]
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 1 - Llama 2 Fine-Tuning 해보기
KorQuad 데이터셋에서 context
안녕하세요 강사님KorQuad 데이터셋을 Llama2 모델에 활용하기 위해서 context는 제거를 하시고 단순하게 Q와 A로 구성된 데이터셋을 구성하였는데 context를 유지해서 학습하는 방법은 없어서 적용하는 건가요? 아니면 LLM의 학습에는 적합하지 않아서 사용하지 않는건가요?GPT등의 모델을 파인튜닝 한다고 했을때도 context는 제거하는게 맞는 건가요??
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 1 - Llama 2 Fine-Tuning 해보기
안녕하세요 P-tuning 관련 질문있습니다.
좋은강의 감사드리며 P-tuning 관련해서 질문이 있습니다.먼저 해당 기법이 적용된 모델로 추론시에 질문이 모델에 들어가면 모델에서 질문을 임의로 변경하여 추론한다고 생각하면 되겠죠??그리고 프롬프트 인코더(LSTM)의 어떤값을 임베딩 벡터로 사용하는 건가요?? 그림을 봤을땐 LSTM의 입력과 출력값은 독립적이고 히든레이어의 출력값이 임베딩 벡터로 사용되는 것으로 보이는데 맞나요?
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 1 - Llama 2 Fine-Tuning 해보기
GPT3의 퓨샷러닝과 파인튜닝에 대해 질문있습니다.
안녕하세요 강사님, 좋은 강의 감사드리며 두가지 질문이 있습니다.일반적으로 GPT 3.5를 그냥 사용한다고 할때, 퓨샷러닝이 학습때 사용되는 기법이 아니라고 이해하였는데 그러면 제가 GPT에게 "영어로 번역해줘"라고 타이핑하면 제 눈에는 안보이지만 GPT 자체적으로 예시를 몇가지 만들고 해당 내용을 바탕으로 추론 결과를 출력한다고 이해하는게 맞을까요?GPT3 학습시 사용되지 않은 데이터에 대해서(특정 산업군 지식이라던지) 적절한 정보를 출력하는 LLM을 만들고자 한다면 파인튜닝이 필수적이라고 생각하였는데 맞나요??