에러:

ConvergenceWarning: lbfgs failed to converge (status=1):

STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

해결: 

model = LogisticRegression(random_state=42)

model = LogisticRegression(random_state=42, solver='lbfgs', max_iter=100) 수정한다.

 

 

참고: python - ConvergenceWarning: lbfgs failed to converge (status=1): STOP: TOTAL NO. of ITERATIONS REACHED LIMIT - Stack Overflow

 

(base) conda info --envs

(base) conda list

(base) conda remove --prefix [PATH] --all

(base) conda remove --name --all

(base) activate test

(test)

 

명령어 conda 나 pip 가 같은 역할의 명령을 수행함.

주의: 모듈을 설치할때는 conda 대신 pip 사용하길 추천함 (아래 글 참고). 버전 충돌이나 miniconda 충돌 등이 발생할 수 있음. 

 

Tensorflow GPU 작동하지 않을때, 재설치 없이 수리하는 법

본 문서는 NVIDIA 그래픽 카드와 Anaconda를 설치했음에도 tensorflow_gpu가 작동하지 않은 경우, 모든 설치 앱을 갈아없지 않고 수리하는 방법을 정리한 것임. 증상 아래 그림에서 CPU만 인식한다. 몇 번

aeir.tistory.com

 

 

 

 

출처:[미세플라스틱] 미세플라스틱 줄이기! 제대로 이해하고, 바르게 실천하기

 

소비 늘린다고 삶의 질이 향상되지 않습니다.

- 무어 선장 (알갈리타 해양연구재단)

 

 

출처: Plastic island 지도에는 없는 [플라스틱섬] 해양 쓰레기섬 미세플라스틱

 

encoding은 OS 시스템 마다 다르다. 

linux 는 utf8 사용

windows 는 cp949 사용 

 

해결

import pandas as pd

df=pd.read_csv(infile, encoding='cp949')

 

 

참고 

linux 에서는 encoding 을 설정할 필요가 없다. 

pandast to_csv() 보면 default: utf-8 이 이미 설정되어 있음. 

 

 

 

 

ModuleNotFoundError: No module named 'sklearn'

  • sklearn 모듈이 없다는 의미
  • 즉, 모듈이 설치되어 있지 않기에, CONDA 모드에서 pip 로 설치해 주면 된다.


Rstudio의 경우,


ModuleNotFoundError: No module named 'keras' 인 경우, 'tensorflow'도 같이 설치해야 됨.

파이썬은 파일 경로 또는 디렉토리와 관련한 코드가 많이 필요

파일 및 디렉토리 경로에 관한 함수는 모두 os 모듈을 사용하기 때문에 os 모듈의 import가 필요

 

 

현재 작업 폴더 얻기: os.getcwd() 

get current working directory

print(os.getcwd())# /Users/evan/dev/python/web-crawler-py/parsed_data

디렉토리 변경: os.chdir(path)

특정 경로에 대해 절대 경로 얻기: os.path.abspath(path)

경로 중 디렉토리명만 얻기: os.path.dir(path)

경로 중 파일명만 얻기: os.path.basename(path)

경로 중 디렉토리명과 파일명 나누어 얻기: os.path.split(path)

dir, file = os.path.split("/Users/evan/dev/python/web-crawler-py/parsed_data")print(dir, file, sep="\n")# /Users/evan/dev/python/web-crawler-py# parsed_data

파일 경로를 리스트로 얻기: 파일 경로를 os.path.sep(OS별 파일 경로 나는 문자)를 이용해 split

print("/Users/evan/dev/python/web-crawler-py/parsed_data".split(os.path.sep))# ['', 'Users', 'evan', 'dev', 'python', 'web-crawler-py', 'parsed_data']

경로를 병합하여 새 경로 생성: os.path.join(path, path1, path2, ...) 넘겨준 path들을 묶어 하나의 경로로 만듬.

print(os.path.join("/Users/evan/dev/python/web-crawler-py/parsed_data", "test"))# /Users/evan/dev/python/web-crawler-py/parsed_data/test

디렉토리 안의 파일/서브 디렉토리 리스트: os.listdir(path) path 하위에 있는 파일, 디렉토리 리스트를 보여줍니다.

print(os.listdir("/Users/evan/dev/python/web-crawler-py/parsed_data"))# ['migrations', 'models.py', '__init__.py', '__pycache__', 'apps.py', 'parser.py', 'admin.py', 'tests.py', 'views.py']

파일 혹은 디렉토리가 존재하는지 체크: os.path.exists(path)

print(os.path.exists("/Users/evan/dev/python/web-crawler-py/parsed_data"))# True​print(os.path.exists("/Users/evan/dev/python/web-crawler-py/parsed_data/admin.py"))# True

디렉토리가 존재하는지 체크: os.path.isdir(path)

print(os.path.isdir("/Users/evan/dev/python/web-crawler-py/parsed_data"))# True​print(os.path.isdir("/Users/evan/dev/python/web-crawler-py/parsed_data/admin.py"))# False

파일이 존재하는지 체크: os.path.isfile(path)

print(os.path.isfile("/Users/evan/dev/python/web-crawler-py/parsed_data"))# False​print(os.path.isfile("/Users/evan/dev/python/web-crawler-py/parsed_data/admin.py"))# True

 

파일의 크기: os.path.getsize(path)

print(os.path.getsize("/Users/evan/dev/python/web-crawler-py/parsed_data"))# 352

 

자 그럼 지금까지 배운것으로 다음 구문이 도대체 뭘 의미하는지 알아보겠습니다.

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

 

import os​print(__file__)# /Users/evan/dev/python/web-crawler-py/parsed_data/parser.py​print(os.path.abspath(__file__))# Users/evan/dev/python/web-crawler-py/parsed_data/parser.py​print(os.path.dirname(os.path.abspath(__file__)))# /Users/evan/dev/python/web-crawler-py/parsed_data
 

1. __file__은 해당 파일이 모듈로서 로드되면 __file__이라는 이름으로 설정됩니다.

2. __file__을 절대 경로화 해줍니다. (맨 앞 /가 붙는 것 빼고는 차이점이 없습니다.)

3. 절대 경로에서 디렉터리 경로를 가져옵니다.

4. BASE_DIR이라는 변수에 저장에 사용합니다.



출처: https://itmining.tistory.com/122 [IT 마이닝]

O3-CO 일변화

CO oxidation

 

 

 

Sources of CH4 (메탄):

Roughly 10% of ·OH in the troposphere reacts with CH4 
[CH4] ~ 1.6 – 1.7 ppm (global avg.)

  • Biological process of methanogenesis, such as enteric fermentation (e.g. in cows)
  • Natural wetlands
  • Rice paddies (in the soil)
  • Termite guts
  • Landfills
  • Fossil fuel reservoirs (so called ancient methanogenesis). 
  • Anthropogenic fossil-fuel combustion
  • Biomass burning
  • Sink of methane:
  • Atmospheric oxidation

 

CH4 oxidation

HCHO (포름알데하이드)

O3, NO2 일변화

Sources of NOx 

higher temperature combustion
biomass burning
lightning

NOx, the source of O3:

Sinks of O3 :

Termination of HOx

 

오존 농도 계산

 

1. 오존 요리 재료

  • NOx, VOCs, hv

 

2. 오존 화학

  • O3 생성 by NO2 반응

  • O3 생성 by NO2 반응

 

그림 설명

기본적으로 NO2가 반응식에 보이면, 광화학 반응에 의해 O3을 생성한다고 알고 있어야 함. 

1. NOx-NO2 반응

하지만, NOx-NO2 상호간의 변화는 null-cycle 로서 O3을 생성하지 않음

NO2가 태양광에 의해서 NO + O로 해리되고 O2와 만나 O3를 생성할 지라도, 다시 오존이 NO에 의해서 소멸되므로 알짜 방정식에서 O3은 생성되지 않음.

그 외 다른 물질들이 광화학 연쇄반응식 중간에 NO2를 생성한다면, 알짜식에서 반드시 O3 생성

2. VOC-NO 반응

VOC radical (RO2*)이 NO와 반응하면 O* + NO가 NO2를 생성함. 이후 태양광에 의해 자연스럽게 O3 생성

3. VOC/NOx 비율이 높은 경우

NOx 농도가 낮아 VOC/NO2가 높은 경우, RO2*은 O3 생성 반응보다 과산화물(peroxide) 생성 반응을 더 선호하여, ROOR'을 생성한다. ROOR'의 전형적인 예는 과산화수소(H2O2).

4. VOC/NOx 비율이 낮은 경우

NOx 감소는 OH를 더 많이 생성하여 RO2*를 증가시켜 O3 생성 가속. 

 

 

 

 

 

오존 등치선 (O3 isopleth)

EPA EKMA 에서 사용한 전형적인 O3 isopleth

O3 오염은 비선형관계로 결정됨.

Adapted from Dodge, 1977

NOx-limited 지역

주로 도시 풍하측 또는 교외 지역

"NOx-limited": 그 지역의 O3농도는 NOx에 의해 주로 결정된다는 의미

 

VOC-limited 지역

주로 대기오염이 높은 도시 지역

"VOC-limited": 그 지역의 VOC농도는 O3에 의해 주로 결정된다는 의미

 

  • 세계적인 대기오염 사건을 기초로 아래와 같이 도시 대기오염 유형을 분류할 수 있다. 
  • 교과서 등에는 런던 스모그, 로스엔젤레스 스모그가 대표
  • 하지만, 생성원인 분류을 생각하면 휴스턴과 중국 타입의 스모그를 추가할 수 있다. 

1. London Smog

Heavy fog in morning hours
Low inversion height (~ 300 ft)
[SO2] ~ 1.3 ppm

[Particles] ~ 4.5 mg m-3
Sulfurous fog (SO4(2-) by coal burning

2. Los Angeles Smog 

In the afternoon “Photochemical smog”

3. Houston Smog

In the afternoon “Photochemical smog”

우리나라는 정유공장이 많은 지역에서 발생할 수 있는 유형

4. In Asian countries

주로 중국발 미세먼지의 전형적인 유형

 

 

  • 모든 과학은 분야별로 연구대상 규모(scale)이 있음. 
  • 기상학에서 사용하는 micro-, meso, synoptic, macro-scale 로 구분법이 대기화학에서도 그대로 적용 (시공간이 같이 때문)
  • 단절된 규모 간에 연결(bridge)은 가능
  • 하지만, scale 간에 통합은 선형성을 벗어나기에 연구 자체가 의미가 없을 수 있거나 비선형성으로 인해 상당히 어려울 수 있음.

 

 

출처: Atmospheric Sciences (Wallace and Hobbs)

 

국내 대기화학 책보다 국외서가 더 많이 읽히기 때문에 용어정리가 필요하다. 

특히 Seinfeld & Pandis 책을 볼때는 이해가 되는 듯 하지만, 막상 기업이나 국내 학회에서 사용하는 용어는 한글로 번역되어야 하는데, 여러 학회 내에서 여전히 용어 정리 중이다. 

 

아래는 대기화학을 공부하는데 기초적인 대표물질들을 정리해 둔 것임(update 가능)

 

기본적으로 산화제는 동시에 환원제임

 

CO2 carbon dioxide (이산화탄소)
CO carbon monoxide (일산화탄소)
O3 ozone

NO nitrogen oxide (일산화질소)
NO2 nitrogen dioxide (이산화질소)

N2O nitrous oxide (아산화질소)
NO3- nitrate (질산염)
HNO3 nitric acid (질산)
N2O5 dinitrogen pentoxide (오산화질소)

S sulfur (황)
SO2 sulfur dioxide (이산화황)
SO3 sulfate trioxide (삼산화황)
SO4-2 sulfate (황산염)

NH3 ammonia (암모니아)
NH4+ ammonium (암모늄 이온)

 

OH hydroxly radical
HO2· (peroxy radicals)

CH3· (methyl radical)
CH3O2· (methyl peroxy radical)
CH3O· (methoxy radical)
HCHO (formaldehyde)

PAN (Peroxyacyl nitrates)

 

 

 

1. Hydroxy group (하이드록시기)

  • -OH으로 표시되는 작용기
  • '수산화기'는 잘못된 표현
  • 작용기 끼리 수소결합이 가능하여 친수성

  *OH( (Hydroxy radical; 하이드록실 라디칼)

  • 살균소독제인 염소(Cl2; Chlorine)보다 >200%, 과산화수소(peroxide)보다 >150% 강력한 살균력
  • 악취, VOC 및 세균을 분해
  • 오존보다 2000배, 자외선(UV)보다 180배 빠른 살균속도
  • lifetime < 1 s
  • 대류권에서의 지구 대기 산화제

  HO2* (Hydroperoxy radical; 하이드로퍼옥실 라디칼)

  • 성층권 오존 파괴와 관련
  • 대류권에서는 일산화질소를 이산화질소로 산화시켜 오존을 생성함
  • NO + HO2 → NO2 + OH

2. Methyl group (메틸기)

  • 메테인에서 나온 작용기
  • 반응성이 큰 미량기체     

   CH3* (Methyl radical; 메틸 라디칼)

   CH3O* (Methoxy radical; 메톡시 라디칼)

   CH3O2* (Methyl peroxyl radical; 메틸퍼옥실 라디칼)

 

 

3. Perxyacetyl nitrate (PAN)

 

  • 광화학 스모그에서 2차반응물질
  • 폐와 눈에 가려움을 유발
  • 온도가 올라가면, peroxyethanoyl radical과 NO2로 분해됨.
  •  

 

 

 

공유결합과 이온결합의 구분

  • 공유결합이나 이온결합이나 모두 전자의 이동으로 인한 변화인데, 전자는 강력한 반응성이 되고 후자는 반응성과 결합성이 약한 이온이 될까? 
  • 공유결과과 이온결합은 다르기 때문인데, 이는 전자를 주고 받은 후 전자의 소유권이 "공동“(공유)이나 "단독“(완전 이전)이냐의 차이로 구분한다. 

 

>>> from matplotlib import pyplot as plt 

ModuleNotFoundError: No module named 'matplotlib'

 

이 문서는 위 에러를 고치는 과정을 통해서, Rstudio에서 python 사용시 Anacona와 Minconda  모듈 충돌 발생하는 경우의 전반적인 문제를 한 번에 해결할 수 있다. 

 

 

R 4.1.0 이상에서도 파이썬으로 딥러닝 코드를 구현할 수 있다. 

Rstudio 설치 후, 맨 처음 import os 같은 파이썬 코드를 불러오면, 아래와 같이 reticulate::repl_pyton() 이라는 모듈을 자동으로 설치한다. 자세히 보면, Miniconda3가 설치되는 것을 볼 수 있다. 

 

 

이 Minconda 가 기존에 설치된 Anacona 와 충돌을 일으키는 경우가 있다. 

 

 

에러 

예를 들면, 아래와 같이 matplotlib 문제이다.

 

>>> from matplotlib import pyplot as plt 

ModuleNotFoundError: No module named 'matplotlib'

 

 

해결

PC에 설치된 Anaconda와 Miniconda

모듈이 설치되어 있지 않은가 해서, Anaconda Prompt (anacond3) 상에서

> pip list 하면

아래와 같이 matplolib이 이미 설치되어 있음을 알 수 있다. 

따라서, anaconda가 아니라 Miniconda를 살펴봐야 한다.

 

 

r-reticulate

Rstudio는 reticulate 패키지를 설치하는데, r-reticulate 가상 환경에서 모둘을 설치해 주어야 한다.

아래와 같은 순서로 진행하면, Rstudio에서 에러를 피할 수 있다. 

1. Anaconda Prompt (R~MINI~1) 열기

2. (base) > conda env list

3. (base) > activate r-reticulate

4. (base) > pip list

   어디에도 matplotlib이 없다. 

 

5. (r-reticulate) pip install matplolib

    conda install 은 가급적 피하시길 (관련글: Tensorflow GPU 작동하지 않을때, 재설치 없이 수리하는 법)

 

6. 마지막으로 Rstudio 에서

>>> from matplotlib import pyplot as plt 

하면 에러 사라짐.

 

 

1. 혹시 모를 버전 충돌 등을 고려하여 가상환경을 먼저 제거한다. 

2. Anacona를 제거한다. 

(이 방법은 Miniconda 에서도 동일하다)

 

1. Anaconda 가상환경 제거

아래 설명에서는 r-reticulate 가상 환경 모두 지우는 방법

 

(base) >conda env list
# conda environments:
#
base                  *  C:\Users\chpark\miniconda3
chpark                   C:\Users\chpark\miniconda3\envs\chpark
r-reticulate             C:\Users\chpark\miniconda3\envs\r-reticulate

 

(base) > conda remove --name r-reticulate --all


Remove all packages in environment C:\Users\chpark\miniconda3\envs\r-reticulate:


## Package Plan ##

  environment location: C:\Users\chpark\miniconda3\envs\r-reticulate

Proceed ([y]/n)?
The following packages will be REMOVED:

  certifi-2019.11.28-py36_0
  pip-20.0.2-py36_1
  python-3.6.10-h9f7ef89_0
  setuptools-46.0.0-py36_0
  sqlite-3.31.1-he774522_0
  vc-14.1-h0510ff6_4
  vs2015_runtime-14.16.27012-hf0eaf9b_1
  wheel-0.34.2-py36_0
  wincertstore-0.2-py36h7fe50ca_0

 

Proceed ([y]/n)?

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

 

 

(base) >conda env list
# conda environments:
#
base                  *  C:\Users\chpark\miniconda3
chpark                   C:\Users\chpark\miniconda3\envs\chpark

(base) C:\Users\chpark>

 

r-reticulate 가상환경이 모두 사라진 것을 확인 할 수 있다. 

같은 방법으로 (base)만 남기고 다 제거한다. 

(base)는 prompt 상에서는 제거되지 않으므으로 아래 방법으로 시스템에서 제거한다. 

 

 

2. Anaconda 제거 (windows 10)

아나콘다의 경우, C:\Users\miniconda3\Uninstall-Anaconda3.exe 실행

미니콘다의 경우, C:\Users\miniconda3\Uninstall-Miniconda3.exe 실행

분류와 회귀에서 사용하는 용어 정리

 

샘플(입력): 학습 모델에 들어갈 하나의 데이터 

예측(출력): 모델 결과 값

타깃(정답): 모델이 완벽하게 예측해야 하는 값

참값(꼬리표, annotation): 일반적으로 사람에 의해 수집된 데이터셋에 대한 모든 타깃.

예측오차(손실값): 모델의 예측과 타깃 사이의 (거리) 차이값

클래스: 분류 문제에서 선택할 수 있는 레이블의 집합.

          예) 고양이-강아지 분류 문제에서 클래스는 "고양이"와 "강아지" 2개

레이블: 분류

1. 지도 학습

가장 흔한 학습 방법

주어진 샘플 데이터의 (사람이 만든)레이블 또는 꼬리표(annotation)에 입력 데이터를 매핑하는 방법을 학습시킴

대부분 분류와 회귀 문제로 구성됨

예) 구문 트리 예측, 물체 감지

 

2. 비지도 학습

타깃없이 입력 데이터의 변환을 찾는 학습방법

데이터 시각화, 데이터 압축, 데이터 노이즈 제거, 데이터 상관관계를 더 잘 이해하기 위해 사용

지도학습 문제를 풀기 전에 데이터셋을 잘 이해하기 위해 사용하는 필수 단계로 이용되기도 함

예) 차원축소, 군집

 

3. 자기 지도 학습(self-supervised learning)

사람이 만든 레이블을 사용하지 않음으로 학습 과정에 사람이 개입하지 않는 지도 학습.

예) 오토인코더(autoencoder), 비디오 다음 프레임 예측, 다음 단어 예측

 

4. 강화학습

구글 딥마인드의 아타리 게임과 알파고 바둑대국 성공으로 주목 받기 시작함.

환경에 대한 정보를 받아 보상을 최대화하는 행동을 선택하도록 학습시킴

예를 들어, 게임 점수를 최대화하기 위한 게임 내의 행동을 출력

대부분 연구영역, 게임 외 성공 사례가 없음.

예) 자율 주행 자동차, 자원 관리, 교육

 

 

 

 

 

 

 

MNIST 데이터베이스 (Modified National Institue of Standards and Technology database)

손글씨 이미지 데이터셋 

0에서 9까지 10가지로 분류될 수 있는 손글씨 숫자 이미지 70,000개

각 이미지는 28×28 픽셀로 구성

각 픽셀은 아래와 같이 0~255 사이의 숫자 행렬로 표현됩니다.

 

 

[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   3  18  18  18 126 136 175  26 166 255 247 127   0   0   0   0]
[  0   0   0   0   0   0   0   0  30  36  94 154 170 253 253 253 253 253 225 172 253 242 195  64   0   0   0   0]
[  0   0   0   0   0   0   0  49 238 253 253 253 253 253 253 253 253 251  93  82  82  56  39   0   0   0   0   0]
[  0   0   0   0   0   0   0  18 219 253 253 253 253 253 198 182 247 241   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0  80 156 107 253 253 205  11   0  43 154   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0  14   1 154 253  90   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0 139 253 190   2   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0  11 190 253  70   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0  35 241 225 160 108   1   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0  81 240 253 253 119  25   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0  45 186 253 253 150  27   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  16  93 252 253 187   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 249 253 249  64   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0  46 130 183 253 253 207   2   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0  39 148 229 253 253 253 250 182   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0  24 114 221 253 253 253 253 201  78   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0  23  66 213 253 253 253 253 198  81   2   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0  18 171 219 253 253 253 253 195  80   9   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0  55 172 226 253 253 253 253 244 133  11   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0 136 253 253 253 212 135 132  16   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]]

 

 

 60,000개의 이미지는 훈련 (Training)에 사용

10,000개의 이미지는 테스트 (Test)에 사용

 

 

코드

1. tensorflow 불러오기

# Tf를 쓰면 무려 Mnist 데이터를 다운받지 않아도 됨.

>>> import tensorflow as tf             

 

2. MNIST 데이터셋 불러오기 (import)

# Tf에서는 train / test set을 자동으로 나눔.

>>> mnist = tf.keras.datasets.mnist
>>> (x_train, y_train), (x_test, y_test) = mnist.load_data()    

 

3. 데이터 전처리 
# mnist 데이터는 0~255 범위의 데이터

# 딥러닝은 0~1 사이로 input 데이터의 범위를 해줘야 원활한 학습이 가능.
# 0~1 사이로 맞춰주기 위해서 255로 나눔.
>>> x_train, x_test = x_train / 255.0, x_test / 255.0
>>> x_train.shape

 

4. 모델구성

# tf.keras.models.Sequential()을 이용해서 인공신경망 모델을 구성

>>> model = tf.keras.models.Sequential([
# 입력층 (Input layer)에서 Flatten()을 이용해서 28×28 픽셀의 값을 784개의 1차원 배열로 변환

...   tf.keras.layers.Reshape((28, 28, 1)),  

# 각 층은 512개와 10개의 인공 뉴런 노드를 갖고 활성화 함수 (activation function)로는 각각 ReLU (tf.nn.relu)와 소프트맥스 (tf.nn.softmax) 사용.
...   tf.keras.layers.Conv2D(16, 3, activation='relu'),
...   tf.keras.layers.Flatten(),
...   tf.keras.layers.Dense(128),
...   tf.keras.layers.Dense(10, activation='softmax')
... ])

 

5. 모델 컴파일

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

 

6. 모델 훈련

>>> model.fit(x_train, y_train, epochs=5)

 

7. 모델 평가

# model.evaluate()를 이용해서 10,000개의 테스트 샘플에 대해 손실 (loss)과 정확도 (accuracy)를 평가

>>>  test_loss, test_acc = model.evaluate(x_test, y_test)

>>> print('테스트 정확도:', test_acc)

 

# Matplotlib을 이용해서 에포크에 따른 정확도 (accuracy)와 손실 (loss) 값을 확인

>>>loss, accuracy = [], []

>>>for i in range(10):

...   model.fit(x_train, y_train, epochs=1)

...   loss.append(model.evaluate(x_test, y_test)[0])

...   accuracy.append(model.evaluate(x_test, y_test)[1])

>>>print(accuracy)

 

 

코드 (copy & paste & run)

import tensorflow as tf
# Tf를 쓰면 무려 Mnist 데이터를 다운받지 않아도 됩니다.
mnist = tf.keras.datasets.mnist
# 또한 train / test set을 알아서 나눠 줍니다.
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# mnist 데이터는 0~255 범위의 데이터 입니다. 
# 이를 0~1 사이로 맞춰주기 위해서 255로 나누는 것인데 
# 딥러닝은 0~1 사이로 input 데이터의 범위를 해줘야 학습이 잘 됩니다.
x_train, x_test = x_train / 255.0, x_test / 255.0

x_train.shape

model = tf.keras.models.Sequential([
  tf.keras.layers.Reshape((28, 28, 1)),
  tf.keras.layers.Conv2D(16, 3, activation='relu'),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128),
  tf.keras.layers.Dense(10, activation='softmax')
])

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

model.fit(x_train, y_train, epochs=5)

## 모델 평가
# model.evaluate(x_test,  y_test, verbose=2)
# 코드를 읽고, 코딩하기도 편하게 따로 불러와줍니다.


test_loss, test_acc = model.evaluate(x_test, y_test)
print('테스트 정확도:', test_acc)

#1회의 에포크마다 model.evaluate()의 loss, accuracy 값을 출력력
loss, accuracy = [], []
for i in range(10):
    model.fit(x_train, y_train, epochs=1)
    loss.append(model.evaluate(x_test, y_test)[0])
    accuracy.append(model.evaluate(x_test, y_test)[1])

print(accuracy)
# end of code

+ Recent posts