<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Aloha oe AI</title>
    <link>https://whosaidiamdev.tistory.com/</link>
    <description>Aloha는 하와이어로 '안녕', '사랑', '평화', '평안'을 모두 포괄하는 단어입니다. 이 블로그는 제가 AI와 함께 aloha하며 지내고자, AI에게 일방적으로 써내려가는 편지입니다.</description>
    <language>ko</language>
    <pubDate>Tue, 12 May 2026 05:33:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Aloha oe AI</managingEditor>
    <image>
      <title>Aloha oe AI</title>
      <url>https://tistory1.daumcdn.net/tistory/7293018/attach/8c9397794c2a4f909da4ecc88eb92267</url>
      <link>https://whosaidiamdev.tistory.com</link>
    </image>
    <item>
      <title>[NLP] 자연어처리와 친해지기 : 머신러닝과 딥러닝 모델은 코드적으로 어떻게 다를까? (feat. 네이버 영화 리뷰 데이터(nsmc) 감성 분석)</title>
      <link>https://whosaidiamdev.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 두달동안 머신러닝과 딥러닝을 차례로 공부하다보니 두 기술이 동일한 테스크를 처리하는데 파이썬 코드 관점에서 어떤 차이가 있을까 궁금해졌다.&lt;br&gt;그래서 오늘 이렇게 알아본다.&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;오늘의 학습 목표 :&lt;/h3&gt;&lt;pre class=&quot;asciidoc&quot;&gt;&lt;code&gt;**네이버 영화 리뷰 데이터를 사용하여 머신러닝과 딥러닝 모델(분류모델)을 비교하기**  &lt;/code&gt;&lt;/pre&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;비교 항목 :&lt;/h3&gt;&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. 데이터 전처리  
2. EDA(탐색적 데이터 분석)  
3. 모델 설정 및 학습  
4. 성능 평가 과정  &lt;/code&gt;&lt;/pre&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용한 데이터셋 :&lt;/h3&gt;&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;**네이버 영화 리뷰 데이터**  
-  ratings_train.txt   
-  ratings_test.txt   
출처 URL : https://github.com/e9t/nsmc  &lt;/code&gt;&lt;/pre&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용한 모델 :&lt;/h3&gt;&lt;pre class=&quot;asciidoc&quot;&gt;&lt;code&gt;- 머신러닝 모델 : **TF-IDF + Naive Bayes**  
- 딥러닝 모델   : **LSTM**&lt;/code&gt;&lt;/pre&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;비교1. 데이터 전처리 및 준비&lt;/h2&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;해당 실험에서 두 모델이 같은 데이터셋을 사용하기에 데이터 전처리는 두 모델 모두 동알합니다.&lt;br&gt;먼저, 데이터는 훈련, 검증, 테스트 세 묶음으로 분할합니다. 이와 함께 결측치 제거, 중복 제거 등의 전처리를 수행합니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import pandas as pd
from sklearn.model_selection import train_test_split

데이터 불러오기
train_data = pd.read_csv(&quot;ratings_train.txt&quot;, sep='\t')
test_data = pd.read_csv(&quot;ratings_test.txt&quot;, sep='\t')

결측치 및 중복 제거
train_data = train_data.dropna(how='any').drop_duplicates(subset=['document'])
test_data = test_data.dropna(how='any').drop_duplicates(subset=['document'])

데이터 분할: 훈련, 검증, 테스트
train_data, val_data = train_test_split(train_data, test_size=0.2, random_state=42)

X_train, y_train = train_data['document'], train_data['label']
X_val, y_val = val_data['document'], val_data['label']
X_test, y_test = test_data['document'], test_data['label']&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;비교 2. EDA(탐색적 데이터 분석)&lt;/h2&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;같은 데이터셋 사용하니 EDA 역시 두 모델이 다르지 않습니다.&lt;br&gt;데이터의 샘플 길이 분포를 시각화해봅니다.&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import matplotlib.pyplot as plt

X_train_length = X_train.apply(lambda x: len(str(x)))

plt.hist(X_train_length, bins=50, alpha=0.75, color='blue')
plt.title(&quot;Train Data Review Length Distribution&quot;)
plt.show()&lt;/code&gt;&lt;/pre&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;비교 3. 모델 설정 및 학습 (차이 발생 구역✨)&lt;/h2&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝과 딥러닝의 차이는 주로 데이터 처리 방식과 모델 학습 과정에서 발생합니다. 아래에 두 접근법의 차이를 정리해봅니다.&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. 머신러닝 모델: TF-IDF + Naive Bayes Classifier&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 모델은 &lt;b&gt;&quot;벡터화 -&amp;gt; 모델 학습 -&amp;gt; 검증 및 테스트 정확도 계산&quot;&lt;/b&gt; 순으로 과정이 전개됩니다.&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, f1_score

3.1.1 TF-IDF 벡터화
TF-IDF와 같은 벡터화 방법을 사용해 문서를 수치 벡터로 변환함
텍스트를 수치로 변환한 후 바로 모델에 넣을 수 있음
tfidf = TfidfVectorizer(max_features=10000)
X_train_tfidf = tfidf.fit_transform(X_train)
X_val_tfidf = tfidf.transform(X_val)
X_test_tfidf = tfidf.transform(X_test)

3.1.2 Naive Bayes 모델 학습
머신러닝 알고리즘(예: Naive Bayes, SVM 등)으로 학습함
일반적으로 훈련 속도가 빠르고 계산이 간단함
nb_model = MultinomialNB()
nb_model.fit(X_train_tfidf, y_train)

3.1.3 검증 및 테스트 정확도 계산
학습된 모델로 검증과 테스트 데이터를 예측하고, 정확도 및 F1 Score를 평가함
y_val_pred = nb_model.predict(X_val_tfidf)
y_test_pred = nb_model.predict(X_test_tfidf)

print(&quot;Naive Bayes Validation Accuracy:&quot;, accuracy_score(y_val, y_val_pred))
print(&quot;Naive Bayes Test F1 Score:&quot;, f1_score(y_test, y_test_pred))&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2. 딥러닝 모델: LSTM 기반 분류기&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델은 &lt;b&gt;&quot;토근화 및 시퀀스변환 -&amp;gt; 토크나이저 설정 및 학습 -&amp;gt; 시퀀스 변환 및 패딩 -&amp;gt; 딥러닝 모델 정의 -&amp;gt; 모델 학습 -&amp;gt; 테스트 데이터 성능 평가&quot;&lt;/b&gt; 순으로 과정이 전개됩니다.&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout

# 3.2.1 토큰화 및 시퀀스 변환
## 텍스트 데이터를 &quot;단어의 시퀀스(Sequence)&quot;로 변환함
## 각 단어를 인덱스 번호로 변환해 &quot;토큰화(Tokenization)&quot;함
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

# 3.2.2 토크나이저 설정 및 학습
## 딥러닝 모델에 맞게 Tokenizer 객체를 설정함
## 텍스트를 토큰 리스트로 변환하는 학습이 포함됨
tokenizer = Tokenizer(num_words=10000)
tokenizer.fit_on_texts(X_train)

# 3.2.3 시퀀스 변환 및 패딩
## 모든 시퀀스의 길이를 동일하게 패딩(Padding)함
## 3긴 시퀀스는 잘라내고, 짧은 시퀀스는 0으로 채워 넣어 입력 크기 통일함
X_train_seq = pad_sequences(tokenizer.texts_to_sequences(X_train), maxlen=100)
X_val_seq = pad_sequences(tokenizer.texts_to_sequences(X_val), maxlen=100)
X_test_seq = pad_sequences(tokenizer.texts_to_sequences(X_test), maxlen=100)

# 3.2.4 딥러닝 모델 정의
Embedding, LSTM, Dense 등의 층으로 구성된 딥러닝 모델을 정의
model = Sequential([
Embedding(input_dim=10000, output_dim=128, input_length=100),
LSTM(128, dropout=0.2, recurrent_dropout=0.2),
Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 3.2.5 모델 학습
## 딥러닝 모델에 데이터를 학습시킵니다. 학습에는 오랜 시간이 걸릴 수 있음
model.fit(X_train_seq, y_train, validation_data=(X_val_seq, y_val), epochs=5, batch_size=64)

# 3.2.6 테스트 데이터 성능 평가
## 학습된 모델을 사용해 테스트 데이터의 성능을 평가함
F1 Score와 정확도 등의 성능 지표를 계산함
y_test_pred_dl = (model.predict(X_test_seq) &amp;gt; 0.5).astype(&quot;int32&quot;)
print(&quot;LSTM Test F1 Score:&quot;, f1_score(y_test, y_test_pred_dl))&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;비교 4. 성능 평가 과정&lt;/h2&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 정확도 및 F1 점수 비교
ml_accuracy = accuracy_score(y_test, y_test_pred)
dl_accuracy = accuracy_score(y_test, y_test_pred_dl)

ml_f1 = f1_score(y_test, y_test_pred)
dl_f1 = f1_score(y_test, y_test_pred_dl)

# 성능 비교 시각화
import numpy as np

metrics = ['Accuracy', 'F1 Score']
ml_scores = [ml_accuracy, ml_f1]
dl_scores = [dl_accuracy, dl_f1]

x = np.arange(len(metrics))
width = 0.35

fig, ax = plt.subplots()
bar1 = ax.bar(x - width/2, ml_scores, width, label='Machine Learning')
bar2 = ax.bar(x + width/2, dl_scores, width, label='Deep Learning')

ax.set_xlabel('Metrics')
ax.set_ylabel('Scores')
ax.set_title('Comparison of ML vs DL')
ax.set_xticks(x)
ax.set_xticklabels(metrics)
ax.legend()

plt.show()&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 모델과 딥러닝 모델은&lt;br&gt;1, 2번 데이터 전처리 및 EDA 과정은 동일합니다.&lt;br&gt;그러나, 그 이후의 &lt;i&gt;데이터 처리 과정&lt;/i&gt;과 &lt;i&gt;학습 과정&lt;/i&gt;은 머신러닝과 딥러닝에서 차이가 큽니다.&lt;br&gt;머신러닝은, &lt;b&gt;벡터화된 수치 데이터를 바로 사용해&lt;/b&gt; 빠르게 학습합니다.&lt;br&gt;딥러닝은, &lt;b&gt;토큰화와 시퀀스 변환 과정을 거쳐 신경망에 입력&lt;/b&gt;하고, &lt;b&gt;복잡한 구조를 학습&lt;/b&gt;합니다.&lt;br&gt;이 차이 때문에 데이터의 &lt;i&gt;크기, 복잡도, 목적에 따라&lt;/i&gt; 머신러닝과 딥러닝 중 적절한 접근 방식을 선택해야 합니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;꼬리생각&lt;/h2&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;Q. 데이터양이 아주 많지는 않고, 각 셀별로 max_length가 짧으면 머신러닝이 성능이 더 좋게 나올 수 있을까?&lt;/h3&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. (데이터 특성에 따라 다르지만 대체로) 그렇다.&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝과 딥러닝 중 어떤 방법이 더 나은 성능을 보일지는 데이터의 특성에 따라 다릅니다만, &lt;b&gt;데이터 양&lt;/b&gt;과 &lt;b&gt;텍스트 길이&lt;/b&gt;는 중요한 요소 중 하나입니다.&lt;/p&gt;&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;li&gt;&lt;b&gt;데이터 양이 적고, 텍스트 길이가 짧은 경우: 머신러닝 추천&lt;/b&gt;✨&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
 &lt;li&gt;간단한 텍스트: 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;각 문장이 짧고 문맥 이해가 많이 필요하지 않을 경우,&amp;nbsp;&lt;/li&gt; 
   &lt;li class=&quot;&quot;&gt;&lt;code&gt;딥러닝 모델의 복잡한 구조가 오히려 성능에 이점을 제공하지 못합니다. &lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;머신러닝 모델(예: Naive Bayes, SVM)은 단순한 &lt;b&gt;빈도 기반&lt;/b&gt; 학습을 하기 때문에, &lt;pre class=&quot;&quot;&gt;&lt;code&gt;짧은 텍스트에서 빠르고 효과적으로 패턴을 잡아낼 수 있습니다.  &lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;데이터 양이 적을 때: 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;딥러닝은 큰 데이터셋에서 제대로 학습하는 경향이 있습니다.&lt;br&gt;데이터가 적을 경우 &lt;b&gt;과적합(overfitting) 위험&lt;/b&gt;이 커지고, 성능이 불안정해질 수 있습니다.&lt;/li&gt; 
   &lt;li&gt;반면, 머신러닝 모델은 &lt;b&gt;적은 데이터&lt;/b&gt;에서도 충분히 성능을 발휘할 수 있습니다.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;TF-IDF와 SVM/Naive Bayes 조합&lt;/b&gt;은 짧은 텍스트 분류에서 매우 좋은 성능을 내는 경우가 많습니다.&lt;br&gt;특히 &lt;b&gt;간단한 이진 분류 문제&lt;/b&gt;에서는 머신러닝이 종종 더 나은 성능을 보입니다.&lt;/li&gt; 
&lt;/ul&gt;&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;li&gt;&lt;b&gt;데이터가 많고, 텍스트가 길거나 문맥 파악이 중요한 경우: 딥러닝 추천&lt;/b&gt;✨&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
 &lt;li&gt;딥러닝 모델(LSTM, Transformer 등)은 시퀀스 데이터와 복잡한 문맥을 잘 처리합니다. 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;문장이 길고, 문맥 정보를 이해해야 하는 경우(예: 리뷰의 감성 분석, 대화 분석) 딥러닝 모델이 더 적합합니다.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;임베딩(Embedding)&lt;/b&gt;을 사용한 딥러닝 모델은 단어의 의미를 더 잘 파악할 수 있습니다. 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;특히, 텍스트 내 &lt;b&gt;다양한 단어가 같은 의미로 쓰이는 경우&lt;/b&gt;(동의어 문제) 딥러닝이 강점을 보입니다.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;꼬리생각 결론: 언제 머신러닝이 더 나을까?&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;&lt;b&gt;데이터의 양이 적거나&lt;/b&gt; 각 셀의 &lt;b&gt;텍스트가 매우 짧고 단순&lt;/b&gt;할 때(예: 채팅, 짧은 리뷰)는 _머신러닝 모델_이 더 나은 선택이 될 수 있습니다.&lt;/li&gt;&lt;li&gt;반면, 텍스트가 길거나 &lt;b&gt;문맥 파악&lt;/b&gt;이 중요한 작업에서는 _딥러닝 모델_이 더 나은 성능을 발휘할 가능성이 높습니다.&lt;/li&gt;&lt;/ul&gt;</description>
      <category>복습 : 케라스 창시자에게 배우는 딥러닝</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/12</guid>
      <comments>https://whosaidiamdev.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 16 Oct 2024 22:43:02 +0900</pubDate>
    </item>
    <item>
      <title>[시스템디자인] 머신러닝 디자인 패턴의 안티패턴(Antipatterns)이란?</title>
      <link>https://whosaidiamdev.tistory.com/11</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;목차&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;머신러닝 디자인 패턴의 안티패턴(Antipatterns)이란 무엇인가요?&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;왜 머신러닝 안티패턴이 필요한가요?&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;머신러닝 안티패턴 종류&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 머신러닝 디자인 패턴의 안티패턴(Antipatterns)이란 무엇인가요?&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;머신러닝이 실제 운영 환경에서 겪는 어려움들&lt;/b&gt;, 즉 비효율적이거나 비생산적인 운영 사례들을&lt;b&gt; '원인에서 문제 발생까지의 과정'&lt;/b&gt;으로 묶어 정리한 것입니다.&lt;br /&gt;이러한 묶음을 &lt;b&gt;'안티패턴(&lt;/b&gt;&lt;b&gt;Antipatterns&lt;/b&gt;&lt;b&gt;)'&lt;/b&gt;이라 부르며, 패턴은 크게 4가지로 구분됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;디자인 패턴은 &lt;u&gt;경험을 바탕으로 정의되었기 때문에&lt;/u&gt; 모든 어려운 상황에 대한 해결책이 되지는 않지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;문제 발생 시&lt;b&gt; 문제 해결의 방향을 잡는 데&lt;/b&gt; 매우 유용&lt;/u&gt;합니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;머신러닝이 실제 운영 환경에서 겪는 어려움들?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;❗Data quality (데이터 품질)&lt;/b&gt;&lt;br /&gt;데이터의 정확성, 완전성, 일관성, 적시성을 포함한 데이터의 전반적인 품질 문제.&lt;br /&gt;&lt;b&gt; &lt;b&gt;❗&lt;/b&gt; Reproducibility (재현성)&lt;/b&gt;&lt;br /&gt;동일한 데이터를 사용해 동일한 결과를 다시 얻을 수 있는 능력과 관련된 문제.&lt;br /&gt;&lt;b&gt; &lt;b&gt;❗&lt;/b&gt; Data Drift (데이터 변화)&lt;/b&gt;&lt;br /&gt;시간에 따라 데이터의 분포가 변하는 현상으로, 모델 성능에 영향을 미칠 수 있는 문제.&lt;br /&gt;&lt;b&gt; &lt;b&gt;❗&lt;/b&gt; Scale (규모 확장성)&lt;/b&gt;&lt;br /&gt;데이터나 시스템의 규모가 커지면서 발생하는 성능 저하나 운영상의 문제.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 왜 머신러닝 안티패턴이 필요한가요?&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 발생했을 때, &lt;b&gt;원인을 쉽게 파악&lt;/b&gt;하고 &lt;b&gt;빠르게 해결 방안&lt;/b&gt;을 찾을 수 있기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안티패턴은 머신러닝의 문제를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✨4가지 운영 환경(&lt;i&gt;SERVING, TRAINING, QA, OPERATION&lt;/i&gt;)으로 나누어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 환경에서 발생할 수 있는 문제들을 정의합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;각 안티패턴은 다음과 같이 세 부분으로 구분 지어 보면 좋습니다 :&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;문제&lt;/b&gt;나 문제 상황을 설명하는 &lt;b&gt;Case(문제 사례)&lt;/b&gt;&lt;br /&gt;2. 해당 &lt;b&gt;문제를 야기한 환경&lt;/b&gt;을 설명하고 대안을 제시하는&lt;b&gt; Situation(환경)&lt;/b&gt;&lt;br /&gt;3. 문제와 문제환경을 시각적으로 보여주는&lt;b&gt; Diagram(도식)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3462&quot; data-origin-height=&quot;1479&quot;&gt;&lt;a href=&quot;https://mercari.github.io/ml-system-design-pattern/Serving-patterns/Anti-patterns/All-in-one-pattern/design_ko.html&quot; target=&quot;_blank&quot; title=&quot;출처로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfl1l5/btsJNLkqsYF/oYTeLm5mWGRz85K8MEyvV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfl1l5%2FbtsJNLkqsYF%2FoYTeLm5mWGRz85K8MEyvV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3462&quot; height=&quot;1479&quot; data-origin-width=&quot;3462&quot; data-origin-height=&quot;1479&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;위 Github에서 안티패턴의 Case, Situation, Diagram, 장단점, 제안, 관련 디자인패턴 확인가능 (출처 이미지 클릭)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;b&gt;머신러닝 문제를 해결할 때, &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스가 속한 운영 환경을 파악한 후 &lt;u&gt;해당 환경에서 발생할 수 있는 &lt;b&gt;문제 사례를 찾아 해결책을 제시&lt;/b&gt;&lt;/u&gt;할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 머신러닝 안티패턴 종류 4가지&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안티패턴은 4가지 운영 환경(&lt;i&gt;SERVING, TRAINING, QA, OPERATION&lt;/i&gt;) 패턴별로 정의됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;각 운영 환경 패턴별 안티패턴들의 'Case(문제상황)'와 'Situation(환경)' 간단히 요약해 보았습니다.&lt;br /&gt;자세한 내용은&lt;a href=&quot;https://mercari.github.io/ml-system-design-pattern/Serving-patterns/Anti-patterns/Online-bigsize-pattern/design_ko.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; 출처&lt;/a&gt;에서 확인가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;☑️ SERVING 패턴의 안티패턴&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(SERVING 패턴: 운영 환경에서 모델을 서빙하는 패턴)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Online bigsize pattern (온라인 대규모 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 대규모 데이터를 실시간으로 처리할 때 발생하는 성능 문제.&lt;/li&gt;
&lt;li&gt;Situation(환경): 실시간 처리가 필요한 웹 서비스나 대규모 배치 시스템에서 모델의 예측 시간이 성능 요구 사항을 충족하지 못할 때 발생합니다. 대규모 복잡한 모델이 사용되면 처리 시간이 길어지기 때문에, 스케일 아웃이나 GPU 사용 등 최적화가 필요합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;All-in-one pattern (올인원 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 모든 기능을 하나의 시스템에 몰아넣는 비효율적인 설계로 인한 문제.&lt;/li&gt;
&lt;li&gt;Situation(환경): 하나의 시스템에 다양한 기능을 몰아넣으면 유지보수가 어려워지고, 시스템 성능이 저하되며 확장성도 제한됩니다. 분리된 서비스로 관리하는 것이 더 효과적일 수 있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;☑️&lt;span&gt;&amp;nbsp;&lt;/span&gt;TRAINING 패턴의 안티패턴&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(TRAINING 패턴: 모델 학습 파이프라인을 구성하기 위한 패턴)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Offline-only pattern (오프라인 전용 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 모델을 오프라인에서만 학습시키고, 실시간 데이터와의 연동을 고려하지 않는 문제.&lt;/li&gt;
&lt;li&gt;Situation(환경): 오프라인에서만 모델을 테스트하면 실시간 데이터를 처리할 때 발생할 수 있는 성능 문제를 놓칠 수 있습니다. 따라서 실시간 환경에서도 모델이 제대로 작동하는지 검증하는 과정이 필요합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;☑️&lt;span&gt;&amp;nbsp;&lt;/span&gt;QA 패턴의 안티패턴&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(QA 패턴: 운영 환경에서 모델 성능을 평가하는 패턴)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Only-me pattern (나만의 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 성능 평가나 테스트를 너무 좁은 시각에서만 진행하는 문제.&lt;/li&gt;
&lt;li&gt;Situation(환경): 특정한 조건에서만 성능 테스트를 진행하면 실제 환경에서 발생하는 다양한 상황을 반영하지 못해 실질적인 성능 저하를 경험할 수 있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Training code in serving pattern (서빙 환경에서 학습 코드 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 모델 서빙 환경에서 학습 코드를 그대로 사용하는 비효율적인 문제.&lt;/li&gt;
&lt;li&gt;Situation(환경): 서빙과 학습 코드의 요구 사항이 다르므로 서빙 환경에 맞춘 최적화가 필요합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Too many pipes pattern (너무 많은 파이프라인 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 너무 복잡한 파이프라인 구조로 인해 관리와 유지 보수가 어려운 문제.&lt;/li&gt;
&lt;li&gt;Situation(환경): 지나치게 복잡한 파이프라인은 시스템의 유연성을 떨어뜨리고, 버그 발생 시 원인을 찾기 어렵게 만듭니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;☑️&lt;span&gt;&amp;nbsp;&lt;/span&gt;OPERATION 패턴의 안티패턴&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(OPERATION 패턴: 모델 운영을 위한 패턴)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;No logging pattern (로그 없음 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 시스템 운영 중 발생하는 문제를 추적할 수 있는 로그가 부족한 상황.&lt;/li&gt;
&lt;li&gt;Situation(환경): 운영 중 발생하는 오류나 문제를 분석할 수 있는 로그가 없다면 문제 해결에 어려움을 겪게 됩니다. 적절한 로깅 시스템을 갖추는 것이 필수적입니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nobody knows pattern (아무도 모르는 패턴)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Case(문제상황): 시스템이나 모델의 상태나 문제를 아는 사람이 없는 상황.&lt;/li&gt;
&lt;li&gt;Situation(환경): 시스템을 운영하는 사람들이 모델의 동작 방식이나 문제 해결 방안을 모르는 경우, 빠른 대응이 불가능해집니다. 이를 방지하기 위해 문서화와 지식 공유가 중요합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>용어 : ML,DL,AI 관련 수학, 비즈니스, 서비스 등</category>
      <category>antipatterns</category>
      <category>machine learning</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>머신러닝 디자인 패턴</category>
      <category>머신러닝 문제</category>
      <category>머신러닝사례</category>
      <category>시스템디자인</category>
      <category>안티패턴</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/11</guid>
      <comments>https://whosaidiamdev.tistory.com/11#entry11comment</comments>
      <pubDate>Thu, 26 Sep 2024 23:06:07 +0900</pubDate>
    </item>
    <item>
      <title>[AI정보] UPENN에서&amp;nbsp;언어모델(Language&amp;nbsp;Modeling)컨퍼런스를&amp;nbsp;주최한다?&amp;nbsp;COLM&amp;nbsp;2024&amp;nbsp;(Google&amp;nbsp;DeepMind,&amp;nbsp;Allen&amp;nbsp;Institute&amp;nbsp;for&amp;nbsp;AI)</title>
      <link>https://whosaidiamdev.tistory.com/10</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; Hello, COLM 2024&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1727268147597&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;COLM 2024는 미국 아이비리그의 명문 대학인 Upenn에서 주최하는 '언어 모델링(Language Modeling)'을 주제로 한 
최초의 컨퍼런스로, 연구자들에게 새로운 학문적 통찰을 제공할 것으로 기대됩니다. 
이번 컨퍼런스는 특히 Denny Zhou(Google DeepMind)와 Yejin Choi(Allen Institute for AI) 
두 저명한 연구자들이 의장을 맡아 업계와 학계에서 큰 관심을 받고 있습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt; Go to &lt;a href=&quot;https://colmweb.org/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;COLM 2024&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Who are They? COLM 2024 의장 소개&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/prkv0/btsJK7WrDFF/q9zLKg6k48uuZu07o72Qz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/prkv0/btsJK7WrDFF/q9zLKg6k48uuZu07o72Qz0/img.png&quot; data-alt=&quot;[좌] Yejin Choi 의장, [우] Denny Zhou 의장 (출처: https://colmweb.org/)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/prkv0/btsJK7WrDFF/q9zLKg6k48uuZu07o72Qz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fprkv0%2FbtsJK7WrDFF%2Fq9zLKg6k48uuZu07o72Qz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;658&quot; height=&quot;377&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[좌] Yejin Choi 의장, [우] Denny Zhou 의장 (출처: https://colmweb.org/)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt; Yejin Choi 의장 (Allen Institute for AI) :&lt;/b&gt;&lt;br /&gt;Yejin Choi는 &lt;b&gt;인간 언어와 AI 간의 상호작용&lt;/b&gt;을 연구하는 데 있어 세계적으로 저명한 인물입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그의 연구는 사회적 상식(reasoning)과 &lt;b&gt;문맥 이해&lt;/b&gt;를 통해 AI가 인간과 더 자연스럽게 소통할 수 있도록 하는 데 중점을 두고 있습니다. 또한,&lt;b&gt; AI 윤리&lt;/b&gt;와 &lt;b&gt;사회적 책임&lt;/b&gt; 문제에 깊은 관심을 가지며, 이를 연구에 반영하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Allen Institute for AI와 University of Washington에서 활발히 연구를 수행 중이며, AI 업계에서 큰 영향력을 발휘하고 있습니다. 그의 연구와 경력에 대한 자세한 정보는 &lt;a href=&quot;https://homes.cs.washington.edu/~yejin/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;개인 웹사이트&lt;/a&gt;에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; Denny Zhou 의장 (Google DeepMind) :&lt;/b&gt;&lt;br /&gt;Denny Zhou는 딥러닝의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;효율성 향상&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모델 해석 가능성 분야&lt;/b&gt;에서 혁신적인 연구를 이끌고 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그의 연구는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;복잡한 시스템의 학습&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;추론 알고리즘 개발&lt;/b&gt;에 중요한 기여를 했으며, 특히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;강화 학습&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;그래디언트 부스팅&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;분야에서 탁월한 성과를 거두고 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Google DeepMind라는 AI 연구의 선두 기관에서 활동하며, 그의 연구는 머신러닝 커뮤니티에서 많은 주목을 받고 있습니다. 자세한 내용은 그의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://dennyzhou.github.io/&quot;&gt;개인 웹사이트&lt;/a&gt;에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COLM 2024 컨퍼런스는 두 의장님의 &lt;b&gt;혁신적인 연구와 리더십&lt;/b&gt; 덕분에 신뢰성을 더욱 높이며, 학술적 깊이와 실무적 응용 가능성을 모두 겸비한 중요한 컨퍼런스로 자리 잡을 것으로 기대됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;COLM 2024: 단순한 NLP를 넘어서는 새로운 시도&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3404&quot; data-origin-height=&quot;1622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOZtjj/btsJLTCYDdH/pDTOLVKMrcIbYzg0xEslvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOZtjj/btsJLTCYDdH/pDTOLVKMrcIbYzg0xEslvk/img.png&quot; data-alt=&quot;[좌] OpenAI CEO 샘 알트만, 2023년 5월 16일 미 상원 청문회, [우] 유럽연합(EU)의 'AI 법(AI ACT)', 2024년 8월 1일 발효. (출처 하단 본문 링크 참고)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOZtjj/btsJLTCYDdH/pDTOLVKMrcIbYzg0xEslvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOZtjj%2FbtsJLTCYDdH%2FpDTOLVKMrcIbYzg0xEslvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3404&quot; height=&quot;1622&quot; data-origin-width=&quot;3404&quot; data-origin-height=&quot;1622&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[좌] OpenAI CEO 샘 알트만, 2023년 5월 16일 미 상원 청문회, [우] 유럽연합(EU)의 'AI 법(AI ACT)', 2024년 8월 1일 발효. (출처 하단 본문 링크 참고)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COLM 2024는 언어 모델에 대한 연구를 심화하는 것뿐만 아니라, 최근 AI 윤리에 대한 논의가 중요한 시점에서 그 의미가 더욱 큽니다. OpenAI의 &lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=151255&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;국제 통제기구 설립 제안&lt;/a&gt;(2023년 5월)과 &lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=161587&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AI Act&lt;/a&gt;의 발효(2024년 8월)로 인해, AI 윤리와 관련 규제는 업계의 성장은 물론, 세계적인 경쟁력에 직접적인 영향을 미칠 이슈로 떠올랐습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 컨퍼런스는 &lt;b&gt;언어 모델의 해석 가능성&lt;/b&gt;과 &lt;b&gt;데이터 효율성&lt;/b&gt;을 주제로 다룰 뿐만 아니라, &lt;b&gt;프라이버시&lt;/b&gt;, &lt;b&gt;사회적 책임&lt;/b&gt; 및 &lt;b&gt;AI의 윤리적 문제&lt;/b&gt;를 심도 있게 논의합니다. 이는 단순한 NLP 연구를 넘어, AI가 인간 사회에 미치는 영향과 책임에 대해 깊이 있는 토론을 유도할 것입니다. 특히 윤리 문제는 AI 연구의 본질적인 도전 과제로 부상하고 있으며, COLM 2024에서 제시될 논의는 AI 연구자들이 앞으로 해결해야 할 중요한 질문들을 던질 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;COLM 2024에서 기대할 수 있는 연구 주제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 컨퍼런스에서는 &lt;b&gt;대형 언어 모델(LLM)을 중심&lt;/b&gt;으로 한 다양한 연구들이 발표됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 모델의 성능 향상, 안정성, 데이터 효율성 등의 주제가 다루어질 뿐만 아니라, &lt;b&gt;사회적 상식(reasoning), 상호작용, 그리고 다국어 처리&lt;/b&gt; 등도 주요 논의 주제입니다. 특히, 최신 연구들이 AI의 실용적 응용과 윤리적 책임을 어떻게 결합할 수 있을지에 대한 흥미로운 논문들이 많이 제출될 예정입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;COLM 2024의 미래 전망&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COLM 2024은 언어 모델링을 중심으로 AI 연구의 새로운 트렌드를 제시할 것으로 보입니다. 특히 Google DeepMind와 Allen Institute for AI와 같은 선두 연구 기관에서 주최하는 만큼, 이번 학술대회는 학문적 깊이뿐 아니라 산업적 응용 측면에서도 연구자들에게 매력적인 장이 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COLM 2024는 AI 연구자들에게 최신 연구 발표와 네트워킹 기회를 제공하며, 앞으로 언어 모델링 연구를 주도할 중요한 컨퍼런스로 자리매김할 것입니다.&lt;/p&gt;</description>
      <category>정보 : AI+a 관련 정보 나눔</category>
      <category>ai 국제기구</category>
      <category>AI규제</category>
      <category>ai법</category>
      <category>AI윤리</category>
      <category>allen&amp;nbsp;institute&amp;nbsp;for&amp;nbsp;ai</category>
      <category>colm 2024</category>
      <category>google&amp;nbsp;deepmind</category>
      <category>구글딥마인드</category>
      <category>사회적책임</category>
      <category>인공지능</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/10</guid>
      <comments>https://whosaidiamdev.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 25 Sep 2024 22:25:02 +0900</pubDate>
    </item>
    <item>
      <title>[함수정리] ML, DL, AI, 데이터분석 기초 : 데이터 전처리</title>
      <link>https://whosaidiamdev.tistory.com/9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  데이터 전처리에서는 뭐를 해야하나?&lt;/h2&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;데이터 전처리는 데이터분석, 머신러닝(ML), 딥러닝(DL), 그리고 인공지능(AI)에서 필수적인 과정입니다. 
데이터를 효과적으로 사용하기 위해 필수적인 과정이죠!

 데이터 분석에서의 전처리는, '결측치 처리', '이상치 처리', '정규화' 등으로 
	 통계적 분석의 신뢰성과 정확성을 향상 시키기 위해 진행하고
 머신러닝에서는,   
 	 '스케일링', '범주형 데이터 처리', '중복 제거'등으로  
 딥러닝에서는,  
 	 '이미지 데이터 처리(pixel값 정규화 등)', 
	 '텍스트 데이터 처리(텍스트 토큰화 등)', 
	 '데이터 증강(augmentation)'등으로  
 모델이 학습하기 좋도록 데이터 정리하여 좋은 성능을 내는데 일조한답니다!

우선 아래 본문에서, 
'결측치 처리', '이상치 처리', '정규화', '범주형 데이터 처리', '중복 제거' 
5가지 작업과 작업에 쓰이는 함수들을 알아보겠습니다. (✨ )&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  목차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;0&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;들어가기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전처리는 뭔가?&lt;/li&gt;
&lt;li&gt;전처리는 언제하는 건가?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;데이터 분석하기 전에 &quot;라이브러리&quot;부터 불러오기!&lt;/li&gt;
&lt;li&gt;데이터 전처리에서 사용하는 함수&lt;br /&gt;- 2.1. 결측치 처리&lt;br /&gt;- 2.2. 이상치 처리&lt;br /&gt;- 2.3. 데이터 정규화&lt;br /&gt;- 2.4. 범주형 데이터 변환&lt;br /&gt;- 2.5. 중복 데이터 제거&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;0. 들어가기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 전처리가 뭔가?&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터를 분석할 수 있는 상태로 준비하는 과정&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;높은 모델 성능, 정확한 분석 등 원하는 결과물을 얻기 위하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 &lt;b&gt;품질을 높이고, 후속 작업(분석 등)에 적합하게 만드는 과정&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에는 &lt;u&gt;결측치 처리, 이상치 처리, 데이터 정규화, 범주형 데이터 변환, 중복 데이터 제거&lt;/u&gt; 같은 작업이 포함됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 전처리는 언제 하는 건가?&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처리는 데이터를 다룰 때 가장 먼저 이루어져야 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적어도 &lt;b&gt;분석 전 &lt;/b&gt;혹은 &lt;b&gt;머신러닝 모델을 훈련하기 전에는, &lt;br /&gt;&lt;/b&gt;항상 데이터를 정제하고 처리하는 전처리 작업을 필수적으로 진행 해야 합니다. &lt;br /&gt;&lt;i&gt;(왜냐면 데이터 전처리가 제대로 되어 있지 않면, 분석 결과나 모델의 성능이 왜곡될 수 있거든요!)&lt;/i&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 데이터 분석하기 전에 &quot;라이브러리&quot;부터 불러오기!&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt; 일단 잘 모르겠으면 아래 3대장 불러오기!&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1726837615010&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#판다스
import pandas as pd 
# 데이터프레임 다루는 함수들 가져옴(`pd.read_csv()`,`dropna()`, `isnull()` 등)

#넘파이
import numpy as np   
# 연산에 사용. 수치 계산, 배열 작업 필요한 전처리 작업중 사용(`sum()`,`mean()`,`np.array()` 등)

#스킷런
from sklearn.preprocessing import MinMaxScaler, StandardScaler, LabelEncoder 
# 데이터 정규화 및 범주형 데이터 인코딩 관련 함수들&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 데이터 전처리에서 사용하는 함수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 전처리의 5가지 작업과 작업별 대표적인 함수, 코드 예시를 정리해보았습니다,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.&amp;nbsp;결측치&amp;nbsp;처리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;결측치란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터셋에서 &lt;b&gt;값이 비어 있는 경우&lt;/b&gt;를 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 처리하지 않으면 분석에 문제가 될 수 있어서 적당한 처리가 필요합니다. &lt;br /&gt;그래서 결측치가 확인된 경우, &lt;u&gt;삭제하거나 특정값으로 채우는 처리&lt;/u&gt;를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ 결측치 처리 함수:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;`isnull()`&amp;nbsp; &amp;nbsp; &amp;nbsp;: 결측치 확인&lt;/li&gt;
&lt;li&gt;`fillna()`&amp;nbsp; &amp;nbsp; &amp;nbsp; : 결측치를 특정 값으로 채우기&lt;/li&gt;
&lt;li&gt;`dropna()`&amp;nbsp; : 결측치가 있는 행을 삭제하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ️ 결측치 확인, 채우기, 행 삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727179786127&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 결측치 확인
data.isnull().sum()

# 결측치를 0으로 채우기
data_filled = data.fillna(0)

# 결측치가 있는 행을 삭제
data_dropped = data.dropna()&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;2.2. 이상치 처리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;✅ 이상치란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상치는 데이터에서 &lt;b&gt;비정상적으로 큰 값이나 작은 값이 나타나는 경우&lt;/b&gt;를 말합니다.&lt;br /&gt;이런 값들을 처리해야 분석에 왜곡이 생기지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ 이상치 처리 함수 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;`quantile()`&amp;nbsp; : 이상치 탐지&lt;/li&gt;
&lt;li&gt;`clip()`&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 이상치 처리 (최소, 최대값으로 조정)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  특정 열의 이상치 처&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727180183056&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 예를 들어, 데이터에서 특정 열에 대한 이상치 탐지 및 처리
q1 = data['some_numeric_column'].quantile(0.25)
q3 = data['some_numeric_column'].quantile(0.75)
iqr = q3 - q1

# IQR을 이용해 이상치 범위를 벗어난 값을 제거
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr

data_outliers_removed = data[(data['some_numeric_column'] &amp;gt;= lower_bound) &amp;amp; 
                             (data['some_numeric_column'] &amp;lt;= upper_bound)]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2.3. 데이터 정규화&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 정규화?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정규화는 데이터의 범위를 조정하는 과정을 말합니다.&amp;nbsp;&lt;br /&gt;머신러닝에서 다양한 범위의 데이터를 비슷한 범위로 맞춰주면 모델 성능이 좋아질 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 데이터 정규화 함수 :&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;`MinMaxScaler()`&amp;nbsp; &amp;nbsp; : 최소-최대 정규화&lt;/li&gt;
&lt;li&gt;`StandardScaler()`&amp;nbsp; : 표준화 (평균이 0, 표준편차가 1로 조정)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; MinMaxScaler()&lt;/b&gt;: 데이터 값을 &lt;b&gt;0과 1 사이&lt;/b&gt;로 변환&lt;/p&gt;
&lt;pre id=&quot;code_1727180323139&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.preprocessing import MinMaxScaler

# 최소-최대 정규화
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data[['some_numeric_column']])

# DataFrame에 다시 저장
data['scaled_column'] = data_scaled&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt; &lt;/b&gt; StandardScaler()&lt;/b&gt;: 데이터를 &lt;b&gt;평균 0, 표준편차 1&lt;/b&gt;로 변환&lt;/p&gt;
&lt;pre id=&quot;code_1727182117133&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.preprocessing import StandardScaler
import numpy as np

# 예시 데이터 (2D 배열)
data = np.array([[1, 2], [2, 4], [3, 6], [4, 8]])

# StandardScaler 사용
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print(&quot;StandardScaler로 변환된 데이터:\n&quot;, scaled_data)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.4.&amp;nbsp;범주형&amp;nbsp;데이터&amp;nbsp;변환&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;b&gt;범주형 데이터 변환&lt;/b&gt;?&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;범주형 데이터는 &lt;b&gt;고유값 혹은 범주로 구성된 데이터&lt;/b&gt;&lt;/u&gt;이고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(ex. 색상 [&quot;Red&quot;,&quot;Blue&quot;,&quot;Green&quot;], 도시 [&quot;SEL&quot;,&quot;NYC.&quot;LAX&quot;,&quot;PAR&quot;,&quot;MIL&quot;]&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt; 범주형 데이터의 변환은, 고유값과 범주를 &lt;b&gt;숫자형으로 변환하는 작업&lt;/b&gt;&lt;/u&gt;을 말합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를들어,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;레이블 인코딩은 &lt;b&gt;범주형 데이터를 각 범주에 숫자를 할당하여 변환&lt;/b&gt;하는 방식이고,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도시 [&quot;SEL&quot;,&quot;NYC.&quot;LAX&quot;,&quot;PAR&quot;,&quot;MIL&quot;]&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;rArr;&amp;nbsp; [ 9, 5, 3, 7, 4 ]&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;원-핫 인코딩은 &lt;b&gt;범주형 데이터를 이진 벡터로 변환&lt;/b&gt;하는 방식입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;색상 [&quot;Red&quot;,&quot;Blue&quot;,&quot;Green&quot;]&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;rArr;&amp;nbsp; [ 0, 0, 1 ]&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;rArr;&amp;nbsp; [ 0, 1, 0 ] &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;rArr;&amp;nbsp; [ 1, 0, 0 ]&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 범주형 데이터 변환 함수 :&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;`pd.get_dummies()`&amp;nbsp; : 원-핫 인코딩&lt;/li&gt;
&lt;li&gt;`LabelEncoder()`&amp;nbsp; &amp;nbsp; &amp;nbsp; : 레이블 인코딩&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  pd.get_dummies() :&amp;nbsp; 원-핫 인코딩 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727181654334&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

data = ['red', 'green', 'blue']
one_hot_encoded_data = pd.get_dummies(data)
print(one_hot_encoded_data)

''' 출력 :
   blue  green  red
0     0      0    1
1     0      1    0
2     1      0    0
'''&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  LabelEncoder() :&amp;nbsp; 레이블 인코딩&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;pre id=&quot;code_1727181699344&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.preprocessing import LabelEncoder

data = ['red', 'green', 'blue']
label_encoder = LabelEncoder()
encoded_data = label_encoder.fit_transform(data)
print(encoded_data)  # 출력 : [2 1 0]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.5.&amp;nbsp;중복&amp;nbsp;데이터&amp;nbsp;제거&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅ 중복된 데이터는 &lt;b&gt;분석에 방해&lt;/b&gt;가 될 수 있어서 &lt;b&gt;제거&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 중복된 데이터 제거 함수 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;drop_duplicates(): 중복된 행 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1727182430318&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 중복된 행 제거
data_no_duplicates = data.drop_duplicates()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코드 : 뚝딱뚝딱101</category>
      <category>numpy</category>
      <category>pandas</category>
      <category>Python</category>
      <category>데이터분석</category>
      <category>데이터전처리</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>전처리</category>
      <category>코딩</category>
      <category>파이썬</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/9</guid>
      <comments>https://whosaidiamdev.tistory.com/9#entry9comment</comments>
      <pubDate>Tue, 24 Sep 2024 22:09:30 +0900</pubDate>
    </item>
    <item>
      <title>[시각화] matplotlib pyplot 만져보기 : (선행대수) 벡터, 그리드 생성, 축 설정, 축 라벨 추가</title>
      <link>https://whosaidiamdev.tistory.com/8</link>
      <description>&lt;h3&gt;라이브러리 불러오기&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt

# 행렬과 벡터를 위해 numpy 불러오기
# 벡터 시각화를 위해 pylot 불러오기&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;pyplot의 subplots 시각화 함수로 &amp;quot;x,y축, 라벨, 범례, 그리드활성&amp;quot; 만들기&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 시각화
fig, axs = plt.subplots()

# 그리드를 생성합니다.
x_vals = np.linspace(0, 2, 5)  # -5에서 5 사이의 11개의 점 (축과 맞추기 위함)
y_vals = np.linspace(0, 2, 5)  # -5에서 5 사이의 11개의 점 (축과 맞추기 위함)
X, Y = np.meshgrid(x_vals, y_vals)

# 벡터 1, 2
axs.arrow(0, 0, 1.9, 1.9, head_width=0.1, head_length=0.1, fc=&amp;#39;pink&amp;#39;, ec=&amp;#39;pink&amp;#39;)
axs.arrow(0, 0, 1.9, 0.9, head_width=0.1, head_length=0.1, fc=&amp;#39;red&amp;#39;, ec=&amp;#39;red&amp;#39;)
axs.plot(X, Y, color=&amp;quot;brown&amp;quot;, alpha=0.5, linestyle=&amp;quot;--&amp;quot;, label=&amp;#39;limit x&amp;#39;,lw=1) # 시작점(x,0) # alpha는 투명도
axs.plot(X.T, Y.T, color=&amp;quot;orange&amp;quot;,       linestyle=&amp;quot;--&amp;quot;, label=&amp;#39;limit y&amp;#39;,lw=1) # 시작점(0,y)

# 축 설정
axs.set_xlim(0, 3)  # x축 범위
axs.set_ylim(0, 3)  # y축 범위

# 축 라벨과 그리드 추가
axs.set_xlabel(&amp;#39;X-axis&amp;#39;)
axs.set_ylabel(&amp;#39;Y-axis&amp;#39;)
axs.grid(True) # True = 그리드 추가함 , False = 추가 안함

plt.show()&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXzCD/btsJE2lOdzl/Nk0CK0trb2j2OFyjDZnZHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXzCD/btsJE2lOdzl/Nk0CK0trb2j2OFyjDZnZHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXzCD/btsJE2lOdzl/Nk0CK0trb2j2OFyjDZnZHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXzCD%2FbtsJE2lOdzl%2FNk0CK0trb2j2OFyjDZnZHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1140&quot; height=&quot;812&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코드 : 뚝딱뚝딱101</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/8</guid>
      <comments>https://whosaidiamdev.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 18 Sep 2024 21:08:36 +0900</pubDate>
    </item>
    <item>
      <title>[AI정보] 중국계 인공지능 커뮤니티가 있다? Machine Heart(机器之心)</title>
      <link>https://whosaidiamdev.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;이 페이지는 9월 25일 업로드한 정보글 &quot;[AI정보]&amp;nbsp;UPENN에서&amp;nbsp;언어모델(Language&amp;nbsp;Modeling)컨퍼런스를&amp;nbsp;주최한다?&amp;nbsp;COLM&amp;nbsp;2024&amp;nbsp;(Google&amp;nbsp;DeepMind,&amp;nbsp;Allen&amp;nbsp;Institute&amp;nbsp;for&amp;nbsp;AI)&quot; 작성중 알게된 정보입니다.&amp;nbsp;&lt;br /&gt;자매글이 업로드되어 링크 공유합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;⬇️ ⬇️ 링크 걸어 놓았습니다 ⬇️ ⬇️&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://whosaidiamdev.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://whosaidiamdev.tistory.com/10&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;Machine Heart (机器之心)&amp;nbsp;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기계의 마음...??&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt; 중국 인공지능 커뮤니티(Machine Heart)는 어쩌다 찾은 거야?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;연휴 기간동안&amp;nbsp; 논문 &amp;lt;&lt;a title=&quot;AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation&quot; href=&quot;https://arxiv.org/abs/2308.08155&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AutoGen&lt;/a&gt;&amp;gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;을 읽어보려고 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;찾다가 우연히 해당 논문이 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;2024년 &lt;b&gt;COLM (Conference on Language Modeling)&lt;/b&gt;이라는 학술대회의 학회 논문으로 발표되었다는 문구를 읽었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;COLM (Conference on Language Modeling)&amp;nbsp;&lt;/b&gt;&lt;br /&gt;2024년 10월 7~9일 개최하는, 인공지능 및 자연어 처리 관련, 언어(LMs) 모델 연구 중점 학술대회.&lt;br /&gt;펜실베니아 대학(University of Pennsylvania)에서 주최하고, Yejin Choi*교수님과 Denny Zhou수석**님께서 의장을 맡고 계신다,&lt;br /&gt;&lt;br /&gt;* University of Washington, Allen Institute for AI 연구소 시니어 연구원 (Professor &amp;amp; Senior researcher)&lt;br /&gt;** Google DeepMind 언어모델 및 추론기법 총책임 수석과학자(Research lead &amp;amp; Principal scientist)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;br /&gt;논문 프리프린트(preprint)라는 개념이 없었던 터라 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&quot;이미 arXiv라는 곳에 서밋된 논문을 왜 다른 학술대회에 다시 출판하지?&quot;라는 생각이 들어 &lt;br /&gt;해당 컨퍼런스를 구글링 해보았다(Offical page : &lt;b&gt;&lt;a title=&quot;COLM&quot; href=&quot;https://colmweb.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;COLM&lt;/a&gt;&lt;/b&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;구글링중 해당 컨퍼런스에 대해 소개한 어떤 페이지를 들어갔는데 왠걸 중국어로 된 AI 커뮤니티 아닌가?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2wfx5/btsJEoCvhOY/Yy0y0FEXhzgiDjYSDjmWRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2wfx5/btsJEoCvhOY/Yy0y0FEXhzgiDjYSDjmWRK/img.png&quot; data-alt=&quot;[글제목] 미래 대규모 언어 모델 학회의 탄생? Danqi Chen 및 연구자들, COLM 학술대회 창설. 언어 모델링 연구의 새로운 플랫폼 제공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2wfx5/btsJEoCvhOY/Yy0y0FEXhzgiDjYSDjmWRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2wfx5%2FbtsJEoCvhOY%2FYy0y0FEXhzgiDjYSDjmWRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;497&quot; height=&quot;264&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2040&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[글제목] 미래 대규모 언어 모델 학회의 탄생? Danqi Chen 및 연구자들, COLM 학술대회 창설. 언어 모델링 연구의 새로운 플랫폼 제공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇다. 나는 이렇게 공부 전 딴짓으로 중국에서 가장 영향력있다는 인공지능 커뮤니티 Machine Heart(기계지심)를 발견했다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  처음 들어보는데? 커뮤니티 진짜 괜찮은 곳 맞아?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네. 맞습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;괜찮을 뿐만 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능 단독 플렛폼중 가장 오래되었을 뿐만 아니라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중국 국내에서 굉장히 &lt;b&gt;높은 신뢰도와 전문성을 인정 받은 커뮤니티&lt;/b&gt;였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 저도 해당 커뮤니티 웹 페이지의 기사 신뢰성을 확인을 위해&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어로 커뮤니티를 검색 해보았고 아무런 정보가 나오지 않아서 의심했습니다만...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3336&quot; data-origin-height=&quot;1110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1uZUn/btsJFbWSvp7/NwLxIceFK534oArLQBnrA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1uZUn/btsJFbWSvp7/NwLxIceFK534oArLQBnrA1/img.png&quot; data-alt=&quot;정말 이것 외에도 몇 가지 더 시도해보았지만 한국어 자료는 나오지 않더군요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1uZUn/btsJFbWSvp7/NwLxIceFK534oArLQBnrA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1uZUn%2FbtsJFbWSvp7%2FNwLxIceFK534oArLQBnrA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3336&quot; height=&quot;1110&quot; data-origin-width=&quot;3336&quot; data-origin-height=&quot;1110&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정말 이것 외에도 몇 가지 더 시도해보았지만 한국어 자료는 나오지 않더군요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 아래 몇 가지로 그 위상을 체감하고 인정(?)하게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;To be Continue...&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;lt; &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;예 고 편 &lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&quot;나락으로 가는가? Reflection 70B 때문에 성능 조작 의혹 받는 Llama 3, 위기 직면&quot; (&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start; background-color: #dddddd;&quot; href=&quot;https://www.jiqizhixin.com/articles/2024-09-08-8&quot;&gt;링크&lt;/a&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;)&lt;/span&gt; &lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3660&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIFWxe/btsJDujsW8c/kFyN7BEZXr52Kp8Ra2lgQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIFWxe/btsJDujsW8c/kFyN7BEZXr52Kp8Ra2lgQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIFWxe/btsJDujsW8c/kFyN7BEZXr52Kp8Ra2lgQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIFWxe%2FbtsJDujsW8c%2FkFyN7BEZXr52Kp8Ra2lgQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3660&quot; height=&quot;1216&quot; data-origin-width=&quot;3660&quot; data-origin-height=&quot;1216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보 : AI+a 관련 정보 나눔</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/7</guid>
      <comments>https://whosaidiamdev.tistory.com/7#entry7comment</comments>
      <pubDate>Mon, 16 Sep 2024 23:43:51 +0900</pubDate>
    </item>
    <item>
      <title>[시각화] #01_세그멘테이션 함수 써보기 : 우주대스타 덕구를 진짜 우주로!</title>
      <link>https://whosaidiamdev.tistory.com/6</link>
      <description>&lt;h1&gt; 우주대스타 덕구를 진짜 우주로!&lt;/h1&gt;
&lt;pre class=&quot;erlang-repl&quot;&gt;&lt;code&gt;오늘 제 페이보릿 인플루언서 멍멍이 덕구(@life_of_duckoo)를 
`pixellib`라이브러리의 인스턴트 세그멘테이션 모델을 사용해서 ✨우주 로 보내보겠습니다.
우주대스타가 있어야 할 곳은 우주니까요! (가자! 덕구!!  )&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; 목차&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;라이브러리 &amp;amp; 데이터 불러오기&lt;/li&gt;
&lt;li&gt;모델 및 세그멘테이션 함수 선택&lt;/li&gt;
&lt;li&gt;이미지 분할, 배열 값 확인&lt;/li&gt;
&lt;li&gt;Color Map 조정 (BGR-&amp;gt;RGB)&lt;/li&gt;
&lt;li&gt;이미지 합치기 : 덕구를 우주로!&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 라이브러리 &amp;amp; 데이터 불러오기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅사용할 라이브러리를 불러온다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 미리 가져오면 곧 진행할 과제의 전체 플로우를 한눈에 볼 수 있다 (효율 )&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import os
import urllib
import cv2
import numpy as np
from pixellib.semantic import semantic_segmentation
from matplotlib import pyplot as plt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅사용할 우주대스타 덕구 이미지도 불러온다&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cell-id=27c7cc8a&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-type=&quot;inline&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 이미지 불러오기
img_path = os.getenv('HOME')+'/codeblog/images/dogbig.png'
img_orig = cv2.imread(img_path)

# 이미지 크기 확인
print(img_orig.shape)

# 불러온 이미지 확인
plt.imshow(cv2.cvtColor(img_orig, cv2.COLOR_BGR2RGB))
# cv2.COLOR_BGR2RGB 원본이 BGR 순서로 픽셀로 바꿔주기
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: left;&quot; data-mime-type=&quot;text/plain&quot;&gt;
&lt;pre class=&quot;python&quot; style=&quot;color: #000000;&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;(540, 540, 3)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGHpL/btsJAiaylpv/b5NnokZdTkT7MvflNfWU41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGHpL/btsJAiaylpv/b5NnokZdTkT7MvflNfWU41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGHpL/btsJAiaylpv/b5NnokZdTkT7MvflNfWU41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGHpL%2FbtsJAiaylpv%2Fb5NnokZdTkT7MvflNfWU41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;(사진출처 : 인스타그램 &quot;life_of_duckoo&quot;)&lt;/p&gt;
&lt;div id=&quot;cell-id=be440c4b&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅사용할 우주 배경 이미지도 불러온다&amp;nbsp;&lt;/p&gt;
&lt;div data-type=&quot;inline&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 배경 이미지 불러오기
img_path_space = os.getenv('HOME')+'/codeblog/images/space.png'
img_orig_space = cv2.imread(img_path_space)

print(img_orig_space.shape) # 이미지 크기 확인

# 불러온 벼경 이미지 확인
plt.imshow(cv2.cvtColor(img_orig_space, cv2.COLOR_BGR2RGB))
# cv2.COLOR_BGR2RGB 원본이 BGR 순서로 픽셀로 바꿔주기
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;(380, 503, 3)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mASY1/btsJy4Lwl8V/rv2VbYqBBCC6Wkx3QkOF2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mASY1/btsJy4Lwl8V/rv2VbYqBBCC6Wkx3QkOF2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mASY1/btsJy4Lwl8V/rv2VbYqBBCC6Wkx3QkOF2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmASY1%2FbtsJy4Lwl8V%2Frv2VbYqBBCC6Wkx3QkOF2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;336&quot; height=&quot;252&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;i&gt;공 습 경 보 !!!!!&lt;/i&gt; &lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;❗배경이미지 `cv2.resize` 해야지 맨 마지막 이미지 합성 단계에서 오류 안 뜸&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;덕구를 보다 더 큰 우주로 보내고픈 마음에 배경 이미지를 크게 늘렸지만 아래 cocat합성(`np.where`) 진행 시 오류가 떴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 작은 우주도 우주다!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;➡️ 우주 배경이미지 크기 조정함 (덕구 사진과 동일한 크기로 줄임!)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; Solution : 우주 배경사진 사이즈 조정&lt;/h4&gt;
&lt;div id=&quot;cell-id=3b294603&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div data-type=&quot;inline&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 이미지 크기 변경     # (380, 503, 3)
new_size = (540, 540)  # (width, height)
img_resized_space = cv2.resize(img_orig_space, new_size)

# 변경된 배경이미지 크기 확인
print(&quot;Resized shape:&quot;, img_resized_space.shape)
# 시각화
plt.imshow(cv2.cvtColor(img_resized_space, cv2.COLOR_BGR2RGB))
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;Resized shape: (540, 540, 3)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Axiy/btsJz3LklbA/qbOoqx22ccnJOCtzkHvSqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Axiy/btsJz3LklbA/qbOoqx22ccnJOCtzkHvSqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Axiy/btsJz3LklbA/qbOoqx22ccnJOCtzkHvSqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Axiy%2FbtsJz3LklbA%2FqbOoqx22ccnJOCtzkHvSqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 모델 및 세그멘테이션 함수 선택&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅PixelLib의 pascalvoc 새그맨테이션 함수 동물도 잘 인식한다고 하여서 사용&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div data-type=&quot;inline&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 모델 가져오기
model_dir = os.getenv('HOME')+'/codeblog/models'
model_file = os.path.join(model_dir, 'deeplabv3_xception_tf_dim_ordering_tf_kernels.h5')

# PixelLib가 제공하는 모델의 url
model_url = 'https://github.com/ayoolaolafenwa/PixelLib/releases/download/1.1/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5'

# 다운로드 시작
urllib.request.urlretrieve(model_url, model_file)
# 원리 :
# urllib 패키지 내에 있는 request 모듈의 urlretrieve 함수를 이용해서 model_url에 있는 파일을 다운로드 해서 model_file 파일명으로 저장&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: left;&quot; data-mime-type=&quot;text/plain&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: left;&quot; data-mime-type=&quot;text/plain&quot;&gt;
&lt;pre class=&quot;python&quot; style=&quot;color: #000000;&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;('/codeblog/models/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5',
 &amp;lt;http.client.HTTPMessage at 0x7ec9241386a0&amp;gt;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅인스턴스 &amp;amp; 모델 선택 : semantic segmentation &amp;amp; pascalvoc&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# PixelLib 클래스를 가져와서 semantic segmentation 인스턴스를 만듦
model = semantic_segmentation()

# pascal voc에 대해 훈련된 예외 모델(model_file)을 로드하는 함수를 호출
model.load_pascalvoc_model(model_file)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 이미지 분할, 배열 값 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ Pascalvoc 함수 가져오기&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;segvalues, output = model.segmentAsPascalvoc(img_path) &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp; ➡️ segmentAsPascalvoc() 함수 호출하여 입력된 이미지의 &quot;분할, 분할 출력의 배열&quot; 가져옴&lt;br /&gt;&amp;nbsp; &amp;nbsp; ➡️ 분할은, pacalvoc 데이터로 학습된 모델을 이용하여 진행됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ Pascalvoc의 라벨 확인&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;# pascalvoc 데이터의 라벨종류
LABEL_NAMES = [
    'background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus',
    'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike',
    'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tv'
]
len(LABEL_NAMES)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;21&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅함수 segmentAsPascalvoc() 호출하여 얻는 결과값(segvalues, output) 확인.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ✔️결과값( segvalues ) 확인&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# segvalues중 인스턴스로 인식된 것 확인 (class_ids)
print(segvalues)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;{'class_ids': array([ 0,  5, 11, 12]), 'masks': array([[False, False, False, ...,  True,  True,  True],
       [False, False, False, ...,  True,  True,  True],
       [False, False, False, ...,  True,  True,  True],
       ...,
       [ True,  True,  True, ..., False, False, False],
       [ True,  True,  True, ..., False, False, False],
       [ True,  True,  True, ..., False, False, False]])}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ✔️결과값( output ) 확인&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# segvalues중 인스턴스로 인식된 것 확인 (영문명)
for class_id in segvalues['class_ids']:
    print(LABEL_NAMES[class_id])&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;background
bottle
diningtable
dog&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ Output 시각화하여, 인스턴스 구분 잘됐나 확인&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# segmentAsPascalvoc() 함수 호출하여 입력된 이미지를 분할한 뒤 나온 결과값 중 
# output을 matplotlib을 이용해 출력
plt.imshow(output)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H9AsS/btsJzMXjVhv/q73CWASCquOztpTrRh5Ac1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H9AsS/btsJzMXjVhv/q73CWASCquOztpTrRh5Ac1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H9AsS/btsJzMXjVhv/q73CWASCquOztpTrRh5Ac1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH9AsS%2FbtsJzMXjVhv%2Fq73CWASCquOztpTrRh5Ac1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Color Map 조정 (BGR-&amp;gt;RGB)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 조정해 주면서, class_id 4개의 rgb를 알아보자!&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Color map은 (R, G, B)로 입력하야 하는데, ` &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;pascalvoc&lt;/span&gt;`는 (B, G, R)로 색상을 인식&lt;br /&gt;고로, for문 사용해서 순서 바꿔준다&lt;/li&gt;
&lt;li&gt;그다음 color map에서 인스턴스별 컬러코드 확인하기&lt;/li&gt;
&lt;li&gt;참고로 우리 우주대스타 덕구 사진 속 인스턴스의 class_id : 배경(0), 병(5), 식탁(11), 개(12)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;colormap = np.zeros((256, 3), dtype = int)
ind = np.arange(256, dtype=int)

for shift in reversed(range(8)):
    for channel in range(3):
        colormap[:, channel] |= ((ind &amp;gt;&amp;gt; channel) &amp;amp; 1) &amp;lt;&amp;lt; shift
    ind &amp;gt;&amp;gt;= 3

colormap[:20] #생성한 20개의 컬러맵 출력

print(colormap[0])   # 배경
print(colormap[5])   # 병
print(colormap[11])  # 식탁
print(colormap[12])  # 개&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[0 0 0]
[128   0 128]
[192 128   0]
[ 64   0 128]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 우주대스타 덕구(Dog)의 색상순서도 바꿔주기 : BGR 순으로 정리된 color map을 RGB로 바꿔주기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그렇다. Dog의 ( 64 0 128)는 사실 (128, 0, 64)인 것!&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;seg_color = (128,0,64) # RGB -&amp;gt; BGR &lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;seg_map = np.all(output==seg_color, axis=-1) 
print(seg_map.shape) 
plt.imshow(seg_map, cmap='gray')
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;(540, 540)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6HBv/btsJzPGwZ8K/7TKVoQDKAUFCVc0OBKjHD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6HBv/btsJzPGwZ8K/7TKVoQDKAUFCVc0OBKjHD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6HBv/btsJzPGwZ8K/7TKVoQDKAUFCVc0OBKjHD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6HBv%2FbtsJzPGwZ8K%2F7TKVoQDKAUFCVc0OBKjHD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  PreTEST : 원본이미지(img_show)와 마스크이미지(img_mask) 가중치 정해서 합쳐보기&lt;/h4&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;# 원본이미지를 img_show에 할당한뒤 
# 이미지 dog이 있는 위치와 배경을 분리해서 표현한 color_mask 를 만든뒤 두 이미지를 합쳐서 출력
img_show = img_orig.copy()

# True과 False인 값을 각각 255과 0으로 바꿔줍니다
img_mask = seg_map.astype(np.uint8) * 255

# 255와 0을 적당한 색상으로 바꿔봅니다
color_mask = cv2.applyColorMap(img_mask, cv2.COLORMAP_JET)

# 원본 이미지와 마스크를 0.6과 0.4의 비율로 섞어 봅니다  
img_show = cv2.addWeighted(img_show, 0.6, color_mask, 0.4, 0.0)

plt.imshow(cv2.cvtColor(img_show, cv2.COLOR_BGR2RGB))
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUJwgb/btsJyCWaTBD/Y8wUuejqsUPv8KuC6VAez1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUJwgb/btsJyCWaTBD/Y8wUuejqsUPv8KuC6VAez1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUJwgb/btsJyCWaTBD/Y8wUuejqsUPv8KuC6VAez1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUJwgb%2FbtsJyCWaTBD%2FY8wUuejqsUPv8KuC6VAez1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 이미지 합치기 : 덕구를 우주로!&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 배경 이미지 아주 살짝만 흐리게! (덕구가 잘 보여야 하니깐요!)&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;img_space_blur = cv2.blur(img_resized_space, (25,25))  
# img_space_blur = cv2.blur(img_resized_space, (99,99)) # 커널이 크니 너무 흐리다
plt.imshow(cv2.cvtColor(img_space_blur, cv2.COLOR_BGR2RGB)) # BGR 형식 -&amp;gt; RGB 형식   
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mQf1h/btsJx9mosPZ/wzMmCUGkKiaaAKna7jPx5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mQf1h/btsJx9mosPZ/wzMmCUGkKiaaAKna7jPx5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mQf1h/btsJx9mosPZ/wzMmCUGkKiaaAKna7jPx5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmQf1h%2FbtsJx9mosPZ%2FwzMmCUGkKiaaAKna7jPx5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 배경 이미지에 덕구 자리를 만들어줘요!&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# Dog의 마스크 인식
img_mask_color = cv2.cvtColor(img_mask, cv2.COLOR_GRAY2BGR)

# cv2.bitwise_not() 사용하여, 배경 : 0 -&amp;gt; 255 , 덕구(dog) : 255 -&amp;gt; 0
img_bg_mask = cv2.bitwise_not(img_mask_color)

# cv2.bitwise_and() 사용하여 블러 처리된 우주배경이미지에 덕구 자리를 만들어 준다
img_bg_blur = cv2.bitwise_and(img_space_blur, img_bg_mask)
plt.imshow(cv2.cvtColor(img_bg_blur, cv2.COLOR_BGR2RGB))
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLYlWZ/btsJzCtNVoi/XglZPk3HsrdJCsyuYNLOB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLYlWZ/btsJzCtNVoi/XglZPk3HsrdJCsyuYNLOB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLYlWZ/btsJzCtNVoi/XglZPk3HsrdJCsyuYNLOB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLYlWZ%2FbtsJzCtNVoi%2FXglZPk3HsrdJCsyuYNLOB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자! 이제...&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;☑️ 우주대스타를 우주로! (`np.where`로 두 사진 합치기)   ➕ &lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;cell-id=588b8f0a&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div data-type=&quot;inline&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 합치고
img_concat = np.where(img_mask_color==255, img_orig, img_bg_blur)
# 봅시다
plt.imshow(cv2.cvtColor(img_concat, cv2.COLOR_BGR2RGB))
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgafIM/btsJzzxeGW7/PhFDgSV8SsaRnp2bSKOcU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgafIM/btsJzzxeGW7/PhFDgSV8SsaRnp2bSKOcU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgafIM/btsJzzxeGW7/PhFDgSV8SsaRnp2bSKOcU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgafIM%2FbtsJzzxeGW7%2FPhFDgSV8SsaRnp2bSKOcU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;252&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 안녕, 덕구야 &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 잘 다녀와!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ✨ &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cell-id=588b8f0a&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코드 : 뚝딱뚝딱101</category>
      <category>colormap</category>
      <category>life_of_duckoo</category>
      <category>np.where</category>
      <category>pascalvoc</category>
      <category>pixellib</category>
      <category>segmentation</category>
      <category>덕구</category>
      <category>딥러닝</category>
      <category>진정한수컷덕구</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/6</guid>
      <comments>https://whosaidiamdev.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 11 Sep 2024 19:11:18 +0900</pubDate>
    </item>
    <item>
      <title>[번역] 전치 합성곱을 사용한 업샘플링(Up-sampling with Transposed Convolution)</title>
      <link>https://whosaidiamdev.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;출처 : &lt;a href=&quot;https://kikaben.com/up-sampling-with-transposed-convolution/&quot;&gt;https://kikaben.com/up-sampling-with-transposed-convolution/&lt;/a&gt;&lt;br /&gt;참고용 깃허브 : &lt;a href=&quot;https://github.com/naokishibuya/deep-learning/blob/master/python/transposed_convolution.ipynb&quot;&gt;https://github.com/naokishibuya/deep-learning/blob/master/python/transposed_convolution.ipynb&lt;/a&gt;&lt;br /&gt;자료 제목 :Up-sampling with Transposed Convolution&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Gentle Reminder : 번역 중 중심내용은 되도록 직역, 아닌 부분은 가독성을 위해 의역을 사용하였습니다. 정확한 내용은 위 출처 원문에서 확인 가능합니다. 아래 글은 영문 원문 읽기 전 참고용으로만 사용하기를 권장드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Up-sampling with Transposed Convolution&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;게재일 2017년 11월 13일&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치 합성곱에 대해 들어보았지만 아직 개념이 헷갈린다면 아래 글을 읽어보기를 바랍니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; 목차&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;업샘플링이 필요한 이유(The Need for Up-sampling)&lt;/li&gt;
&lt;li&gt;왜 전치 합성곱을 사용할까?(Why Transposed Convolution?)&lt;/li&gt;
&lt;li&gt;합성곱 연산(Convolution Operation)&lt;/li&gt;
&lt;li&gt;역으로 가기(Going Backward)&lt;/li&gt;
&lt;li&gt;합성곱 행렬(Convolution Matrix)&lt;/li&gt;
&lt;li&gt;전치 합성곱 행렬(Transposed Convolution Matrix)&lt;/li&gt;
&lt;li&gt;요약&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 업샘플링이 필요한 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신경망을 사용하여 이미지를 생성할 때는 보통 저해상도에서 고해상도로 업샘플링을 수행해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1BX9F/btsJvsxMGYW/YNEt98veoDNHKEbsHZ6N1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1BX9F/btsJvsxMGYW/YNEt98veoDNHKEbsHZ6N1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1BX9F/btsJvsxMGYW/YNEt98veoDNHKEbsHZ6N1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1BX9F%2FbtsJvsxMGYW%2FYNEt98veoDNHKEbsHZ6N1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;610&quot; height=&quot;285&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업샘플링을 수행하는 다양한 방법이 있습니다:&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;- 최근접 이웃 보간법 (Nearest neighbor interpolation)
- 바이리니어 보간법 (Bi-linear interpolation)
- 바이큐빅 보간법 (Bi-cubic interpolation)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모든 방법은 네트워크 아키텍처를 결정할 때 우리가 선택해야 하는 보간법을 포함합니다.&lt;br /&gt;이는 수동적인 특징 공학과 비슷하며, 네트워크가 학습할 수 있는 여지는 없습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 왜 전치 합성곱(Transposed Convolution)을 사용할까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크가 최적으로 업샘플링을 학습하도록 하려면 전치 합성곱을 사용할 수 있습니다.&lt;br /&gt;이는 미리 정의된 보간법을 사용하지 않고, 학습 가능한 매개변수를 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치 합성곱 개념을 이해하는 것은 중요한 논문과 프로젝트에서 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;DCGAN&quot; href=&quot;https://arxiv.org/pdf/1511.06434v2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DCGAN&lt;/a&gt;의 생성자는 임의로 샘플링된 값을 사용하여 전체 크기의 이미지를 생성합니다.&lt;/li&gt;
&lt;li&gt;시맨틱 분할(semantic segmentation)에서 인코더는 합성곱 계층을 사용하여 특징을 추출하고, 디코더는 원본 이미지 크기로 복원하여 원본 이미지의 각 픽셀을 분류합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 전치 합성곱은 Fractionally-strided convolution 또는 Deconvolution(역합성곱)이라고도 불립니다.&lt;br /&gt;이 글에서는 전치 합성곱이라고만 부르지만, 다른 글에서는 대체 명칭을 볼 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 합성곱 연산(Convolution Operation)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 연산이 어떻게 작동하는지 간단한 예시를 통해 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4x4 행렬이 있고, 3x3 커널을 사용해 패딩 없이 스트라이드 1로 합성곱 연산을 적용한다고 가정해 봅시다.&lt;br /&gt;아래에 나온 것처럼 출력은 2x2 행렬입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;convolution-operation.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tzXsY/btsJve7CGlq/e22o34xqRPU6KmLkV6pkT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tzXsY/btsJve7CGlq/e22o34xqRPU6KmLkV6pkT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tzXsY/btsJve7CGlq/e22o34xqRPU6KmLkV6pkT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtzXsY%2FbtsJve7CGlq%2Fe22o34xqRPU6KmLkV6pkT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;303&quot; data-filename=&quot;convolution-operation.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 연산은 입력과 커널 행렬 사이의 요소별 곱의 합을 계산합니다.&lt;br /&gt;우리는 패딩 없이 스트라이드 1을 사용하므로 이 계산을 4번만 수행할 수 있습니다. 따라서 출력 행렬은 2x2입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sum-of-element-wise-multiplication.png&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uYXNt/btsJvn4kbjV/kfN6icuORDYCwB6m0jeyE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uYXNt/btsJvn4kbjV/kfN6icuORDYCwB6m0jeyE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uYXNt/btsJvn4kbjV/kfN6icuORDYCwB6m0jeyE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuYXNt%2FbtsJvn4kbjV%2FkfN6icuORDYCwB6m0jeyE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;600&quot; data-filename=&quot;sum-of-element-wise-multiplication.png&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 합성곱 연산의 중요한 점은 입력 값과 출력 값 사이에 위치적 연결성이 존재한다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;br /&gt;입력 행렬의 좌측 상단 값은 출력 행렬의 좌측 상단 값에 영향을 미칩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3x3 커널을 사용하여 9개의 입력 행렬 값을 하나의 출력 값에 연결합니다. &lt;b&gt;합성곱 연산은 다대일 관계를 형성합니다&lt;/b&gt;. &lt;br /&gt;이 점을 기억해 두면 이후에 유용하게 쓰입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 역으로 가기(Going Backward)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 역방향으로 가고 싶다고 가정해 봅시다. 한 행렬의 하나의 값을 다른 행렬의 9개의 값에 연결하고자 합니다. 이는 일대다 관계이며, 합성곱 연산을 역으로 수행하는 것과 같습니다. 이것이 전치 합성곱의 핵심 아이디어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 2x2 행렬을 4x4 행렬로 업샘플링합니다. 이 연산은 1대 9의 관계를 유지합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 어떻게 이런 연산을 수행할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 설명하기 위해서는 합성곱 행렬과 전치 합성곱 행렬을 정의해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 합성곱 행렬(Convolution Matrix)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 연산을 행렬로 표현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 커널 행렬을 재배열하여 행렬 곱셈으로 합성곱 연산을 수행할 수 있게 하는 방식입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.1_3x3-kernel.png&quot; data-origin-width=&quot;194&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bapu9s/btsJC0vDeq8/ICdruRt9G00hZN8e8FbbX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bapu9s/btsJC0vDeq8/ICdruRt9G00hZN8e8FbbX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bapu9s/btsJC0vDeq8/ICdruRt9G00hZN8e8FbbX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbapu9s%2FbtsJC0vDeq8%2FICdruRt9G00hZN8e8FbbX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;194&quot; height=&quot;218&quot; data-filename=&quot;5.1_3x3-kernel.png&quot; data-origin-width=&quot;194&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 위와 같은 3x3 커널을 4x16 행렬로 재배열하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.2_4x16-kernel.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y4zgJ/btsJCFyD2TD/jXxDmK8S1XWkrbk3ICrIj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y4zgJ/btsJCFyD2TD/jXxDmK8S1XWkrbk3ICrIj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y4zgJ/btsJCFyD2TD/jXxDmK8S1XWkrbk3ICrIj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy4zgJ%2FbtsJCFyD2TD%2FjXxDmK8S1XWkrbk3ICrIj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;242&quot; data-filename=&quot;5.2_4x16-kernel.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 합성곱 행렬입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 행은 하나의 합성곱 연산을 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 이해되지 않으면, 아래 다이어그램이 도움이 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 행렬의 각 행은 다른 위치에 0 패딩이 있는 커널 행렬을 재배열한 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.3_3x3-4x16.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSem4r/btsJCIB80xr/itubzEdfIZK357jOMK4XBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSem4r/btsJCIB80xr/itubzEdfIZK357jOMK4XBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSem4r/btsJCIB80xr/itubzEdfIZK357jOMK4XBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSem4r%2FbtsJCIB80xr%2FitubzEdfIZK357jOMK4XBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;464&quot; data-filename=&quot;5.3_3x3-4x16.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 행렬을 사용하려면, 아래와 같이 입력 행렬(4x4)을 열 벡터(16x1)로 평탄화(flatten) 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음 4x16 합성곱 행렬과 16x1 입력 행렬(16차원 열 벡터)을 행렬 곱셈합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3827&quot; data-origin-height=&quot;1917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKtrgr/btsJD8lCweJ/GD0wYmMP4vUfixqcHk2T71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKtrgr/btsJD8lCweJ/GD0wYmMP4vUfixqcHk2T71/img.png&quot; data-alt=&quot;[좌] 4*4&amp;amp;rarr;16*1 입력행렬의 평탄화(flatten), [우] 합성곱행렬(4*16)과 입력 행렬(16*1)의 행렬 곱셈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKtrgr/btsJD8lCweJ/GD0wYmMP4vUfixqcHk2T71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKtrgr%2FbtsJD8lCweJ%2FGD0wYmMP4vUfixqcHk2T71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3827&quot; height=&quot;1917&quot; data-origin-width=&quot;3827&quot; data-origin-height=&quot;1917&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[좌] 4*4&amp;rarr;16*1 입력행렬의 평탄화(flatten), [우] 합성곱행렬(4*16)과 입력 행렬(16*1)의 행렬 곱셈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNLwER/btsJCXr971y/KPkK8fk5F95Vi9et1HTLg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNLwER/btsJCXr971y/KPkK8fk5F95Vi9et1HTLg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNLwER/btsJCXr971y/KPkK8fk5F95Vi9et1HTLg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNLwER%2FbtsJCXr971y%2FKPkK8fk5F95Vi9et1HTLg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;267&quot; height=&quot;229&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 출력된 4x1 행렬은 2x2 행렬로 재구성할 수 있으며, 이는 동일한 결과를 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 가능한 이유는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 행렬은 재배열된 커널 가중치일 뿐이며, 합성곱 연산은 합성곱 행렬로 표현하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 말을 다른 식으로 말해보자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 행렬이 4x16일 때 합성곱 행렬을 사용하면 16(4x4)에서 4(2x2)로 변환할 수 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 만약 행렬이 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;16x4이라&lt;/span&gt; 4(2x2)에서 16(4x4)으로 갈 수 있다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무슨 말이냐고요? 당황하지 마세요.&lt;br /&gt;아래에서 다시 설명해 보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 전치 합성곱 행렬(Transposed Convolution Matrix)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 4(2x2)에서 16(4x4)으로 변환하고 싶다면, 우리는 16x4 행렬을 사용합니다. 여기서 중요한 것은 1대 9 관계를 유지해야 한다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 행렬 C(4x16)를 전치(C.T)하여 C.T(16x4)를 만들고, 열 벡터(4x1)와 행렬 곱셈하여 출력 행렬(16x1)을 생성할 수 있습니다. 전치된 행렬은 하나의 값을 출력에서 9개의 값에 연결합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.1_transposed-convolution (1).png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1qjtc/btsJD7mKIam/sGHGw9MUEnYORY3FJz0lG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1qjtc/btsJD7mKIam/sGHGw9MUEnYORY3FJz0lG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1qjtc/btsJD7mKIam/sGHGw9MUEnYORY3FJz0lG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1qjtc%2FbtsJD7mKIam%2FsGHGw9MUEnYORY3FJz0lG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;503&quot; data-filename=&quot;6.1_transposed-convolution (1).png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력은 4x4로 재구성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.2_4x4-output.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IXpjh/btsJDOnxVXX/GF340B51kFQvBKYTvGKns1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IXpjh/btsJDOnxVXX/GF340B51kFQvBKYTvGKns1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IXpjh/btsJDOnxVXX/GF340B51kFQvBKYTvGKns1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIXpjh%2FbtsJDOnxVXX%2FGF340B51kFQvBKYTvGKns1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;248&quot; height=&quot;273&quot; data-filename=&quot;6.2_4x4-output.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 작은 행렬(2x2)을 더 큰 행렬(4x4)로 업샘플링했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치 합성곱은 가중치 배치를 통해 1대9 관계를 유지합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로, 실제 가중치 값은 원래 합성곱 행렬에서 오지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 것은 가중치 배치가 전치된 합성곱 행렬의 모양과 동일하게 배열된다는 점입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 요약&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치 합성곱 연산은 일반적인 합성곱과 동일한 연결성을 형성하지만, 방향만 반대입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법을 사용하여 업샘플링을 수행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가 전치 합성곱의 가중치는 학습 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 미리 정의된 보간법이 필요 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치 합성곱이라고 해서 기존 합성곱 행렬을 가져와서 전치된 버전을 사용한다는 뜻은 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 것은 입력과 출력 사이의 연결이 일반적인 합성곱 행렬과는 반대로 처리된다는 점입니다(일대다 관계, 일반 합성곱의 다대일 관계와 반대).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 전치 합성곱은 합성곱이 아닙니다만 전치 합성곱을 합성곱으로 에뮬레이션 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 행렬의 값 사이에 0을 추가하여 입력을 업샘플링한 후 합성곱을 수행하면 전치 합성곱과 동일한 효과를 낼 수 있습니다. 그러나 입력을 업샘플링하기 위해 0을 추가해야 하므로 비효율적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할 점: 전치 합성곱은 생성된 이미지에서 체커보드 아티팩트(체커보드 패턴)를 유발할 수 있습니다. 이러한 문제를 줄이기 위해 보간 방법(업샘플링 연산) 후에 합성곱 연산을 사용하는 것이 권장됩니다. 이미지에서 이러한 아티팩트 없이 생성하는 것이 목표라면 관련 논문을 읽어보는 것이 좋습니다.&lt;/p&gt;</description>
      <category>번역 : 딥러닝, AI 관련 자료</category>
      <category>CNN</category>
      <category>Conv2DTranspose</category>
      <category>ConvNet</category>
      <category>kikaben</category>
      <category>업샘플링</category>
      <category>인공지능</category>
      <category>합성곱</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/5</guid>
      <comments>https://whosaidiamdev.tistory.com/5#entry5comment</comments>
      <pubDate>Fri, 6 Sep 2024 22:35:43 +0900</pubDate>
    </item>
    <item>
      <title>DeepLearning101_07_케라스완전정복_Code : 사용자 정의 '지표' 만들기</title>
      <link>https://whosaidiamdev.tistory.com/4</link>
      <description>&lt;h4&gt;Recreating code 7-18 from book &amp;quot;Deep Learning with Python&amp;quot; by François Chollet&lt;/h4&gt;
&lt;h4&gt;CODE 7-18 : Metric 클래스 상속하여 사용자 정의 지표 구하기&lt;/h4&gt;
&lt;h5&gt;Import Tools&lt;/h5&gt;
&lt;p&gt;&amp;#39;&amp;#39;&amp;#39;python&lt;br&gt;import tensorflow as tf&lt;br&gt;from tensorflow import keras&lt;br&gt;from tensorflow.keras import layers&lt;br&gt;from tensorflow.keras.datasets import mnist&lt;br&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/p&gt;
&lt;h5&gt;Define Functions&lt;/h5&gt;
&lt;p&gt;&amp;#39;&amp;#39;&amp;#39;python&lt;/p&gt;
&lt;h1&gt;defining_model&lt;/h1&gt;
&lt;p&gt;def get_mnist_model():&lt;br&gt;    inputs = keras.Input(shape=(28*28,))&lt;br&gt;    features = layers.Dense(512, activation=&amp;quot;relu&amp;quot;)(inputs)&lt;br&gt;    features = layers.Dropout(0.5)(features)&lt;br&gt;    outputs = layers.Dense(10, activation=&amp;quot;softmax&amp;quot;)(features)&lt;br&gt;    model = keras.Model(inputs, outputs)&lt;br&gt;    return model&lt;/p&gt;
&lt;h1&gt;defining_metrics&lt;/h1&gt;
&lt;p&gt;class RootMeanSquaredError(keras.metrics.Metric): # metric클래스를 상속합니다&lt;br&gt;    def &lt;strong&gt;init&lt;/strong&gt;(self, name=&amp;quot;&amp;quot;, *&lt;em&gt;kwargs):&lt;br&gt;        super().&lt;strong&gt;init&lt;/strong&gt;(name=name, *&lt;/em&gt;kwargs)&lt;br&gt;        self.mse_sum = self.add_weight(name=&amp;quot;mse_sum&amp;quot;, initializer=&amp;quot;zeros&amp;quot;)&lt;br&gt;        self.total_samples = self.add_weight(&lt;br&gt;            name=&amp;quot;total_samples&amp;quot;, initializer=&amp;quot;zeros&amp;quot;, dtype=&amp;quot;int32&amp;quot;)&lt;br&gt;        # 생성자에서 상태 변수를 정의합니다. 층과 마찬가지로 add_weight()매서드를 사용합니다&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def update_state(self, y_true, y_pred, sample_weight=None):
    y_true = tf.one_hot(y_true, depth=tf.shape(y_pred)[1])
    mse = tf.reduce_sum(tf.square(y_true - y_pred))
    self.mse_sum.assign_add(mse)
    num_samples = tf.shape(y_pred)[0]
    self.total_samples.assign_add(num_samples)

def result(self):
    return tf.sqrt(self.mse_sum / tf.cast(self.total_samples, tf.float32))

def reset_state(self):
    self.mse_sum.assign(0.)
    self.total_samples.assign(0)
    # 객체 다시 생성하지 않고 상태 초기화하는 방법 제공!
    # 왜 ? 초기화 해야 지표 객체 1개로 서로 다른 훈련 반복, 평가 등 모두 사용 할 수 있음
    # 근데 : 초기화 하지 않으면 이 클래스에 이전 데이터 영향을 주나? 클래스의 메모리란 뭐지?&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/p&gt;
&lt;h5&gt;Let&amp;#39;s See How it Works!&lt;/h5&gt;
&lt;p&gt;&amp;#39;&amp;#39;&amp;#39;python&lt;/p&gt;
&lt;h1&gt;데이터 불러오기&lt;/h1&gt;
&lt;p&gt;(images, labels),(test_images, test_labels) = mnist.load_data()&lt;/p&gt;
&lt;h1&gt;데이터 전처리&lt;/h1&gt;
&lt;p&gt;images = images.reshape((60000, 28&lt;em&gt;28)).astype(&amp;quot;float32&amp;quot;) / 255&lt;br&gt;test_images = test_images.reshape((10000, 28&lt;/em&gt;28)).astype(&amp;quot;float32&amp;quot;) / 255&lt;/p&gt;
&lt;h1&gt;train 과 validation 데이터 나누기&lt;/h1&gt;
&lt;p&gt;train_images, val_images = images[10000:], images[:10000]&lt;br&gt;train_labels, val_labels = labels[10000:], labels[:10000]&lt;/p&gt;
&lt;h1&gt;shape check&lt;/h1&gt;
&lt;p&gt;print(f&amp;quot; 훈련_X : {train_images.shape}&amp;quot;)&lt;br&gt;print(f&amp;quot; 검증_X : {val_images.shape}&amp;quot;)&lt;br&gt;print(f&amp;quot; 텟트_X : {test_images.shape}&amp;quot;)&lt;br&gt;print(f&amp;quot; 훈련_y : {train_labels.shape}&amp;quot;)&lt;br&gt;print(f&amp;quot; 검증_y : {val_labels.shape}&amp;quot;)&lt;br&gt;print(f&amp;quot; 텟트_y : {test_labels.shape}&amp;quot;)&lt;br&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/p&gt;
&lt;h4&gt;Set Model, Train, Validate, Evaluate&lt;/h4&gt;
&lt;p&gt;&amp;#39;&amp;#39;&amp;#39;python&lt;br&gt;model = get_mnist_model()&lt;br&gt;model.compile(optimizer=&amp;quot;rmsprop&amp;quot;,&lt;br&gt;              loss=&amp;quot;sparse_categorical_crossentropy&amp;quot;,&lt;br&gt;              metrics=[&amp;quot;accuracy&amp;quot;,RootMeanSquaredError])&lt;br&gt;              # 상위 사용자 정의 &amp;#39;지표&amp;#39;(RootMeanSquaredError), 표준위크플로 모델설계 &amp;#39;metric(지표)&amp;#39;부분에 추가함&lt;br&gt;model.fit(train_images, train_labels,&lt;br&gt;          epochs=3,&lt;br&gt;          validation_data=(val_images,val_labels))&lt;br&gt;test_metrics = model.evaluate(test_images, test_labels)&lt;br&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/p&gt;</description>
      <category>복습 : 케라스 창시자에게 배우는 딥러닝</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/4</guid>
      <comments>https://whosaidiamdev.tistory.com/4#entry4comment</comments>
      <pubDate>Wed, 4 Sep 2024 22:16:52 +0900</pubDate>
    </item>
    <item>
      <title>DeepLearning101_07_케라스완전정복_워크플로우란?</title>
      <link>https://whosaidiamdev.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Keras는 모델 훈련을 위한 다양한 워크플로를 제공한다.&lt;br /&gt;워크플로란 딥러닝 모델의 전체과정으로,&lt;br /&gt;데이터 &lt;i&gt;수집*과 *전처리&lt;/i&gt;, 모델의 &lt;i&gt;설계&lt;/i&gt;, &lt;i&gt;훈련&lt;/i&gt;, &lt;i&gt;검증&lt;/i&gt;, &lt;i&gt;튜닝&lt;/i&gt;, &lt;i&gt;평가&lt;/i&gt;, &lt;i&gt;배포&lt;/i&gt;, &lt;i&gt;모니터링&lt;/i&gt;까지 과정의 단계들을 내포한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;만드는 것도, 훈련하는 것도 다양한 Keras 워크플로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;케라스는 이 모든 과정을 크게 세 가지 방향으로 제공한다.&lt;br /&gt;사용자가...&lt;br /&gt;1. 개별 단계(ex.훈련루프)와 단계에서 사용될 요소(ex.모델)까지 모두 직접 짤 수 있는 방향과&lt;br /&gt;2. 개별 단계를 매서드로 호출하도록 API를 만들어 매서드 내 모델과 파라미터 등 결정하면 되는 방향&lt;br /&gt;3. 위 두 가지를 혼용하는 방향&lt;br /&gt;이렇게 워크플로를 유연하게 사용할 수 있는 이유는, 모든 워크플로는 &lt;code&gt;keras.Model&lt;/code&gt; &lt;code&gt;keras.Layer&lt;/code&gt;같은 Keras API를 기반하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 두 번째 방향에 해당하는 &quot;표준 워크플로&quot;를 소개하겠다. (pg.261)&lt;br /&gt;(데이터는 단일레이블-다중분류모델인 MNIST 데이터셋을 사용함)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7-17 표준 워크플로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(설계 : &lt;code&gt;compile()&lt;/code&gt;, 훈련 : &lt;code&gt;fit()&lt;/code&gt;, 평가 : &lt;code&gt;evaluate()&lt;/code&gt;, 예측 : &lt;code&gt;predict()&lt;/code&gt;)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터셋 가져오기(import)&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt; from tensorflow.keras.datasets import mnist&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 정의하기&lt;/h3&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;    def get_mnist_model():
     inputs = keras.Input(shape=(28*28,))
     features = layers.Dense(512, activation=&quot;relu&quot;)(inputs)
     features = layers.Dropout(0.5)(features)
     outputs = layers.Dense(10, activation=&quot;softmax&quot;)(features)
     model = keras.Model(inputs, outputs)
     return model&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 전처리 : train과 test 데이터 분리&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;(images, labels),(test_images, test_labels) = mnist.load_data()
images = images.reshape((60000, 28*28)).astype(&quot;float32&quot;) / 255
test_images = test_images.reshape((10000, 28*28)).astype(&quot;float32&quot;) / 255
train_images, val_images = images[10000:], images[:10000]
train_labels, val_labels = labels[10000:], labels[:10000]&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 훈련, 평가하기&lt;/h3&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;model = get_mnist_model()
model.compile(optimizer=&quot;rmsprop&quot;,
              loss=&quot;sparse_categorical_crossentropy&quot;,
              metrics=[&quot;accuracy&quot;])
# 훈련루프              
model.fit(train_images,train_labels,
          epochs=3,
          validation_data=(val_images, val_labels))
#평가루프
test_metrics = model.evaluate(test_images,test_labels)
predictions = model.predict(test_images)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2732&quot; data-origin-height=&quot;2048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz7Jbt/btsJqRLd6yT/dZvMJ7wxxq45kgcIGW4VEK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz7Jbt/btsJqRLd6yT/dZvMJ7wxxq45kgcIGW4VEK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz7Jbt/btsJqRLd6yT/dZvMJ7wxxq45kgcIGW4VEK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz7Jbt%2FbtsJqRLd6yT%2FdZvMJ7wxxq45kgcIGW4VEK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2732&quot; height=&quot;2048&quot; data-origin-width=&quot;2732&quot; data-origin-height=&quot;2048&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;출처 : &lt;a href=&quot;https://ml-ops.org/content/end-to-end-ml-workflow&quot;&gt;https://ml-ops.org/content/end-to-end-ml-workflow&lt;/a&gt;&lt;/p&gt;</description>
      <category>복습 : 케라스 창시자에게 배우는 딥러닝</category>
      <author>Aloha oe AI</author>
      <guid isPermaLink="true">https://whosaidiamdev.tistory.com/3</guid>
      <comments>https://whosaidiamdev.tistory.com/3#entry3comment</comments>
      <pubDate>Tue, 3 Sep 2024 23:14:31 +0900</pubDate>
    </item>
  </channel>
</rss>