Assignment 1 (22.09.19) -- 풀이O
교수님 풀이, 안 건들임
- 제출은
이름(학번).ipynb
파일과이름(학번).html
파일 2개를 제출할 것. - ipynb 혹은 html 파일을 이용한 제출이 익숙하지 않은 학생은 질문할 것.
from fastai.vision.all import *
from fastai.collab import *
from fastai.text.all import *
아래를 이용하여 MNIST_SAMPLE 이미지 자료를 다운로드 받고 dls오브젝트를 만들어라.
path = untar_data(URLs.MNIST_SAMPLE)
dls = ImageDataLoaders.from_folder(path,suffle=False)
dls.show_batch()
(1)
cnn_learner를 이용하여 lrnr 오브젝트를 생성하라.
- arch 는 resnet34 로 설정할 것
- metrics 는 error_rate 로 설정할 것
(풀이)
lrnr = cnn_learner(dls, arch = resnet34, metrics=error_rate)
(2)
fine_tune 을 이용하여 lrnr 오브젝트를 학습하라.
(풀이)
lrnr.fine_tune(1)
(3)
아래를 이용하여 X,y를 만들어라.
X,y = dls.one_batch()
X,y의 shape을 조사하라. X에는 몇개의 이미지가 있는가? 이미지의 size는 얼마인가?
(풀이)
X,y = dls.one_batch()
X.shape
X에는 64개의 이미지가 있고 크기는 (28,28) 이다.
(4)
아래의 코드를 이용하여 X의 두번째 이미지가 어떠한 숫자를 의미하는지 확인하라. (그림보고 3인지 7인지 확인하여 답을 쓸 것)
show_image(X[0])
그리고 show_image가 정의된 파일의 경로를 확인하고 show_image가 python 내장함수 인지, torch에서 지원하는 함수인지 fastai에서 지원하는 함수인지 파악하라.
(풀이)
show_image(X[1]) # 두번째 이미지
show_image?
- fastai에서 지원하는 함수
(5)
lrnr 오브젝트를 이용하여 AI가 X[0]을 어떤 값으로 판단하는지 확인하라. 올바르게 판단하였는가? 올바르게 판단했다면 몇 프로의 확신으로 판단하였는가? <-- 문제가 의도한 것과 다르게 만들어졌어요
(풀이)
show_image(X[0]) # 첫번째 이미지
lrnr.model(X[0].reshape(1,3,28,28))
import numpy as np
a=np.exp(3.4148)
b=np.exp(-5.0356)
print('3일확률',a/(a+b))
print('7일확률',b/(a+b))
원래문제의도:
lrnr.predict(X[0].to("cpu"))
아래를 이용하여 rcmd_anal.csv 를 다운로드 받고 dls오브젝트를 만들어라.
df = pd.read_csv('https://raw.githubusercontent.com/guebin/DL2022/master/_notebooks/2022-09-08-rcmd_anal.csv')
df
(1)
73번 유저가 먹은 아이템 및 평점을 출력하는 코드를 작성하라. 이를 기반으로 73번 유저가 어떠한 취향인지 파악하라.
(풀이)
df.query('user == 73')
- 홍차를 선호
(2)
dls와 lrnr 오브젝트를 생성하고 lrnr 오브젝트를 학습하라.
(풀이)
dls = CollabDataLoaders.from_df(df)
lrnr = collab_learner(dls,y_range=(0,5))
lrnr.fit(50)
(3)
아래와 같은 데이터 프레임을 생성하고 df_new 에 저장하라.
import IPython
_html='<table border="1" class="dataframe">\n <thead>\n <tr style="text-align: right;">\n <th></th>\n <th>user</th>\n <th>item</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>73</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>73</td>\n <td>2</td>\n </tr>\n <tr>\n <th>2</th>\n <td>73</td>\n <td>3</td>\n </tr>\n <tr>\n <th>3</th>\n <td>73</td>\n <td>4</td>\n </tr>\n <tr>\n <th>4</th>\n <td>73</td>\n <td>5</td>\n </tr>\n <tr>\n <th>5</th>\n <td>73</td>\n <td>6</td>\n </tr>\n <tr>\n <th>6</th>\n <td>73</td>\n <td>7</td>\n </tr>\n <tr>\n <th>7</th>\n <td>73</td>\n <td>8</td>\n </tr>\n <tr>\n <th>8</th>\n <td>73</td>\n <td>9</td>\n </tr>\n <tr>\n <th>9</th>\n <td>73</td>\n <td>10</td>\n </tr>\n <tr>\n <th>10</th>\n <td>73</td>\n <td>11</td>\n </tr>\n <tr>\n <th>11</th>\n <td>73</td>\n <td>12</td>\n </tr>\n <tr>\n <th>12</th>\n <td>73</td>\n <td>13</td>\n </tr>\n <tr>\n <th>13</th>\n <td>73</td>\n <td>14</td>\n </tr>\n <tr>\n <th>14</th>\n <td>73</td>\n <td>15</td>\n </tr>\n <tr>\n <th>15</th>\n <td>73</td>\n <td>16</td>\n </tr>\n <tr>\n <th>16</th>\n <td>73</td>\n <td>17</td>\n </tr>\n <tr>\n <th>17</th>\n <td>73</td>\n <td>18</td>\n </tr>\n <tr>\n <th>18</th>\n <td>73</td>\n <td>19</td>\n </tr>\n <tr>\n <th>19</th>\n <td>73</td>\n <td>20</td>\n </tr>\n </tbody>\n</table>'
IPython.display.HTML(_html)
(풀이)
df_new=pd.DataFrame({'user':[73]*20,'item':range(1,21)})
df_new
(4)
아래의 코드를 이용하여 73번 유저의 취향을 파악하라. 73번 유저가 커피3, 커피5를 먹는다면 얼마정도의 평점을 줄 것이라 예측되는가?
_dl = dls.test_dl(df_new)
lrnr.get_preds(dl=_dl)
(풀이)
_dl = dls.test_dl(df_new)
lrnr.get_preds(dl=_dl)
- 커피3: 1.0191, 커피5: 1.0122
아래를 이용하여 자료를 다운로드 받아라.
df = pd.read_csv('https://raw.githubusercontent.com/guebin/DL2022/master/_notebooks/2022-09-19-human_numbers_100.csv')
df
(1)
TextDataLoaders.from_df을 이용하여 dls오브젝트를 만들어라.
- is_lm = True 로 설정할 것
- seq_len = 5 로 설정할 것
(풀이)
dls = TextDataLoaders.from_df(df,is_lm=True,seq_len=5,text_col='text')
dls.show_batch()
(2)
lrnr 오브젝트를 만들어라.
- arch = AWD_LSTM 이용
- metrics = accuracy 이용
(풀이)
lrnr = language_model_learner(dls, arch= AWD_LSTM, metrics=accuracy)
(3)
lrnr오브젝트에서 fine_tune(3) 메소드를 이용하여 모형을 학습하라.
(풀이)
lrnr.fine_tune(3)
(4)
'one , two ,' 이후에 이어질 50개의 단어를 생성하라.
(풀이)
lrnr.predict('one, two,', n_words=50)
(5)
'twenty , twenty one , ' 이후에 이어질 50개의 단어를 생성하라.
(풀이)
lrnr.predict('twenty, twenty one,', n_words=50)
Collab 에서 (혹은 리눅스기반 서버에서) 아래의 명령어를 순서대로 실행해보라.
!ls
!ls -a
!ls .
!ls ..
!ls sample
!mkdir asdf
!wget https://raw.githubusercontent.com/guebin/DL2022/master/_notebooks/2022-09-08-rcmd_anal.csv
!cp 2022-09-08-rcmd_anal.csv ./asdf
!ls ./asdf
!rm 2022-09-08-rcmd_anal.csv
!rm -rf asdf
각 명령들이 무엇을 의미하는지 간단히 서술하라.
(풀이)
!ls
- 현재디렉토리 파일+폴더 출력
- !ls . 와 같음
- !ls ./ 와 같음
!ls -a
- 현재디렉토리 파일+폴더 출력, 숨겨진 항목까지 출력
!ls .
- 현재디렉토리 파일+폴더 출력
- !ls 와 같음
- !ls ./ 와 같음
!ls ..
- 현재디렉토리보다 상위디렉토리의 파일+폴더 출력
!ls sample
- 현재디렉토리에 sample 디렉토리 출력
- !ls ./sample 과 같음
!mkdir asdf
- 현재디렉토리에 asdf 폴더 생성
- !mkdir ./asdf 와 같음
!wget https://raw.githubusercontent.com/guebin/DL2022/master/_notebooks/2022-09-08-rcmd_anal.csv
- url에 있는 파일 다운로드하여 현재디렉토리에 저장
!cp 2022-09-08-rcmd_anal.csv ./asdf
- 2022-09-08-rcmd_anal.csv 파일을 ./asdf 로 복사
!ls ./asdf
- 현재디렉토리에서 asdf 디렉토리의 내용출력
- !ls asdf 와 같음
!rm 2022-09-08-rcmd_anal.csv
- 현재 디렉토리에서 2022-09-08-rcmd_anal.csv 파일삭제;
- rm ./2022-09-08-rcmd_anal.csv 와 같음
!rm -rf asdf
- 현재 디렉토리에서 asdf 삭제 (asdf 폴더내에 파일이 존재하면 파일도 같이 삭제)
- r은 recursively, f는 force의 약자