728x90
반응형

>>> 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 

하면 에러 사라짐.

 

 

반응형
728x90
반응형

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 실행

반응형
728x90
반응형

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

 

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

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

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

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

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

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

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

레이블: 분류

반응형
728x90
반응형

1. 지도 학습

가장 흔한 학습 방법

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

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

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

 

2. 비지도 학습

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

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

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

예) 차원축소, 군집

 

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

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

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

 

4. 강화학습

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

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

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

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

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

 

 

 

 

 

 

 

반응형
728x90
반응형

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

반응형
728x90
반응형

기울기 소실 문제(vanishing gradient)

  • 출력층에서 은닉층을 역방향으로 하나씩 진행하며, 각 층(은닉층, 입력층)의 가중치를 수정하는 방법
  • 가중치 수정을 위해서는 미분값(기울기)가 필요
  • 층의 갯수가 늘어나면, 역전파를 통해 전달되는 기울기 값이 점점 작아져, 맨 처음층(입력층)까지 도달하지 않는 문제가 발생... 기울기 소실 문제(vanishinig gradient)
  • 활성화 함수(시그모이드 함수)의 특징 때문에, 여러 층을 거칠 수록 기울기가 사라져서 가중치 수정이 어려워짐.

 

활성화 함수

1. Sigmoid 함수

 

  • 미분하면 최대치가 < 1.0 따라서, 계속 곱하면 0에 수렴.... 기울기 소실 발생

2. tanh 함수

  • 시그모이드 함수 확장형 [-1,1]
  • 1보다 작은 값이 존재하므로, 기울기 소실 발생

기울기 소실 문제를 해결하기 위해서 새로운 활성화 함수가 필요. 

3. ReLU 함수

  • 0보다 작을때 0으로 처리, 0보다 클때 x값을 그대로 사용 ... 기울기 소실 해결

4. Softplus 함수

  • ReLU함수에서 0보다 작은 경우를 완화한 함수... 기울기 소실 해결

 

 

그 외 다양한 활성화 함수

Activation Functions : Sigmoid, tanh, ReLU, Leaky ReLU, PReLU, ELU, Threshold ReLU and Softmax basics for Neural Networks and Deep Learning | by Himanshu S | Medium

 

Activation Functions : Sigmoid, ReLU, Leaky ReLU and Softmax basics for Neural Networks and Deep…

Let’s start with the basics why would we even need an activation function and what is it >

himanshuxd.medium.com

반응형
728x90
반응형

양자역학

The different energy levels are quantized

 

 

 

 

All processes above are determined by incoming energy. Other processes can be found a physical chemistry book.

 

광화학 광분해 Photolysis (Photo-dissociation)

분자가 광자를 흡수한다고 모두 화학변화를 유발하는 것은 아님.

분자의 구조와 에너지에 따라서 달라짐.

 

산소원자(O)의 산화반응

 

오존(O3) 산화반응

반응형
728x90
반응형

Radiational absorption spectrum

 

 

Radiational Energy

1. Electronic energy level

2. Vibrational energy level

3. Rotational energy level

반응형
728x90
반응형

1. 농도

2. 이상기체 방정식

3. 기체 부분압 구하기

 

 

 

기체부분압 구하기

 

aeir.tistory.com

 

4. 기체 분자 수농도 구하기

 

 

 

기체 분자수 구하기 (이상기체방정식)

 

aeir.tistory.com

5. 혼합비 (mixing ratio)

 

6. 대기구성 

7. 체류시간 (life time)

 

8. 체류기간에 따른 대기화학 규모분석

반응형
728x90
반응형

출처: Wallace and Hobbs 

Which of the following gases has a mixing ratio in the northern hemisphere that is roughly twice that in the southern hemisphere?

Ar, CO, CO2, CH4

 

반응형
728x90
반응형

From meteorology to air pollution

Weather <- H2O phase transformation

Air pollution <- gas phase (smog) / particular matter (haze)

                      Chemical species can be considered H2O in weather


Emissions

natural and anthropogenic inorganic compounds (NOx) 

organic compounds(VOC)

 

Chemical transformation 

1. Photochemistry

    oxidants: OH, O3

2. Gas−phase and heterogeneous chemistry

    "non−volatile" condensed -> aerosols -> dry/wet deposition

Connection between meteorology and atmospheric chemistry

  • Aerosols are the key between two areas
  • Cloud formation
  • Radiative transformation
  • Greenhouse effects (CH4, H2O, CO2, O3, CFCs)

 

 

Atmopspheric Chemistry

1. It is related to:

  • Organic chemistry (Alkane, Alkenes, Ketones, …)
  • Inorganic chemistry (sulfur, nitrogen, halogen compounds)
  • Physical chemistry (reaction rate, photolysis)
  • Nano chemistry (aerosols)
  • Biochemistry (humans, animals, plants)
  • Analytical chemistry (measurements)
  • Theoretical chemistry (Quantum chemistry)

2. Atmospheric radiation (scattering, absorption, cloud formation, circulations).
3. Observations from fields, lab, and satellites.

4. Numerical simulation 
5. Tropospheric chemistry 

  • Urban
  • remote continental
  • marine chemistry

6. Stratospheric chemistry 

 

 

Chemical Processes in the atmosphere

 

 

General Oxidation Processes

 

 

 

반응형
728x90
반응형

여기서는 모델이 수행되는 과정에서는 에러가 없었으나, 최종 결과가 loss: NaN, accuracy:NaN, mae:NaN 등으로 나오는 경우, 필자가 찾아낸 문제해결 법이다.

 

지금까지 2가지 경우에 대해서 경험하였고, 다음과 같이 해결할 수 있다. 

 

1. 입력 데이터에 NA 가 들어있는 경우

   이때 아래와 같이 데이터 셋에서 NA를 제거해 준 다음 사용하면 된다. 

    > data.set <- na.omit(<INPUT DATA>)

    > str(data.set)


2. 활성화 함수 선택이 문제인 경우

   1번으로 해결되지 않을 때, layer_dense 내 activation 함수를 "softmax"에서 "relu"로 바꾸면 된다. single output 인 경우, softmax를 사용하면 이런 현상이 발생할 수 있다. 여기(https://github.com/keras-team/keras/issues/2134) 내용의 댓글들을 참고하시오. 

 

3. 입력 데이터에 Inf 가 들어있는 경우

  아래 블로그를 참조하시라. 

 

https://klavier.tistory.com/entry/R%EC%97%90%EC%84%9C-NAN%EC%9D%B4%EB%82%98-INF%EB%A1%9C-%EC%9D%B8%ED%95%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%BD%94%EB%93%9C%EA%B0%80-%EB%8F%8C%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C-%EC%A1%B0%EC%B9%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

반응형
728x90
반응형

책이나 사이트에 공개된 잘 만들어진 예제를 이용해서, 자신의 데이터에 바로 적용할 때, 필자와 같은 왕초보들은 항상, as always, as usual, 필연적으로, 반드시, 운명적으로, ....  한방에 작동하지 않고 여러가지 문제들로 인해 머리가 지끈지끈 아픈 상황과 문제가 발생할 수 있다. 아니, 발생한다.  하나하나 잡아보자. 

 

딥러닝 책  등에서 제공된 예제 파일들은 모두 Keras 등의 패키지 내에 포함된 예제 파일들이다. 그래서 실제 내가 만든 .csv 파일을 읽어 들이는데, 입력 포맷이 맞지 않아 헤맬 수 있다. 이런 경우, 모델이 잘 돌아가지만, input_data 값이 없다는 에러가 발생할 수 있다. 

 

아래와 같이 sampling 하면, 일반 책에서 사용하는 예제 파일을 읽어들이는 포맷으로 쉽게 변환된다. 아래는 13개 컬럼으로 구성된 데이터 셋의 경우의 예임. 

 

> set.seed(1)

   # sample 함수는 수행할 때 마다 다른 난수를 추출하기 때문에 난수를 고정시켜 같은 값이 나오도록 하기 위함이다. 

> smp = sample(1:nrow(<INPUT DATA>), nrow(<INPUT DATA>)/2) 

   # 2로 나눈 것은 절반의 데이터만 추출해서 쓰겠다는 의미

> train_data <- <INPUT DATA>[smp, 1:12]

> train_targets <- <INPUT DATA>[smp, 13]

> test_data <- <INPUT DATA>[-smp, 1:12]

> test_targets <- <INPUT DATA>[-smp, 13]

 

이 후 keras model을 구성하면 된다.

 

반응형
728x90
반응형

출처: Grouped, stacked and percent stacked barplot in ggplot2 – the R Graph Gallery (r-graph-gallery.com)

 

 

Grouped barchart


A grouped barplot display a numeric value for a set of entities split in groups and subgroups. Before trying to build one, check how to make a basic barplot with R and ggplot2.

A few explanation about the code below:

  • input dataset must provide 3 columns: the numeric value (value), and 2 categorical variables for the group (specie) and the subgroup (condition) levels.
  • in the aes() call, x is the group (specie), and the subgroup (condition) is given to the fill argument.
  • in the geom_bar() call, position="dodge" must be specified to have the bars one beside each other.

# library library(ggplot2) # create a dataset specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) ) condition <- rep(c("normal" , "stress" , "Nitrogen") , 4) value <- abs(rnorm(12 , 0 , 15)) data <- data.frame(specie,condition,value) # Grouped ggplot(data, aes(fill=condition, y=value, x=specie)) + geom_bar(position="dodge", stat="identity")

 

Stacked barchart


A stacked barplot is very similar to the grouped barplot above. The subgroups are just displayed on top of each other, not beside.

The only thing to change to get this figure is to switch the position argument to stack.

# library library(ggplot2) # create a dataset specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) ) condition <- rep(c("normal" , "stress" , "Nitrogen") , 4) value <- abs(rnorm(12 , 0 , 15)) data <- data.frame(specie,condition,value) # Stacked ggplot(data, aes(fill=condition, y=value, x=specie)) + geom_bar(position="stack", stat="identity")

Percent stacked barchart


Once more, there is not much to do to switch to a percent stacked barplot. Just switch to position="fill". Now, the percentage of each subgroup is represented, allowing to study the evolution of their proportion in the whole.

# library library(ggplot2) # create a dataset specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) ) condition <- rep(c("normal" , "stress" , "Nitrogen") , 4) value <- abs(rnorm(12 , 0 , 15)) data <- data.frame(specie,condition,value) # Stacked + percent ggplot(data, aes(fill=condition, y=value, x=specie)) + geom_bar(position="fill", stat="identity")

 

Grouped barchart customization


As usual, some customization are often necessary to make the chart look better and personnal. Let’s:

  • add a title
  • use a theme
  • change color palette. See more here.
  • customize axis titles

# library library(ggplot2) library(viridis) library(hrbrthemes) # create a dataset specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) ) condition <- rep(c("normal" , "stress" , "Nitrogen") , 4) value <- abs(rnorm(12 , 0 , 15)) data <- data.frame(specie,condition,value) # Small multiple ggplot(data, aes(fill=condition, y=value, x=specie)) + geom_bar(position="stack", stat="identity") + scale_fill_viridis(discrete = T) + ggtitle("Studying 4 species..") + theme_ipsum() + xlab("")

Small multiple


Small multiple can be used as an alternative of stacking or grouping. It is straightforward to make thanks to the facet_wrap() function.

# library library(ggplot2) library(viridis) library(hrbrthemes) # create a dataset specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) ) condition <- rep(c("normal" , "stress" , "Nitrogen") , 4) value <- abs(rnorm(12 , 0 , 15)) data <- data.frame(specie,condition,value) # Graph ggplot(data, aes(fill=condition, y=value, x=condition)) + geom_bar(position="dodge", stat="identity") + scale_fill_viridis(discrete = T, option = "E") + ggtitle("Studying 4 species..") + facet_wrap(~specie) + theme_ipsum() + theme(legend.position="none") + xlab("")

 

 

반응형
728x90
반응형

처음 딥러닝을 시작할 때, 가장 편한 방법으로 설명.

예를 들어, Anaconda2 와 Anaconda3의 차이는 무엇인지 등에 대한 설명 없이 설치 방법 중심으로 설명한다. 

Anaconda는 딥러닝과 관련된 여러가지 패키지를 모두 모아놓은 것이라, 용량이 너무 크고, 초보자가 설치하기에는 자잘한 에러들이 자주 발생할 수 있다. 따라서, 가벼운 minconda3를 설치하는 것으로 처음 딥러닝을 시작하자.

 

여기서 다룰 내용은 아래와 같다. 

1) Minconda 설치

2) 가상환경 설정

3) tensorflow 설치

 

1. Anaconda3(miniconda3) 설치하기. 

https://repo.continuum.io/miniconda/에서 최신 버전을 받아도 되지만, python 버전이 명시된 파일을 다운 받자.

또한 새 버전의 python은 초보자에게 머리 아픈 설치상의 오류를 발생시킬 수도 있으니, python 3.7 버전이 탑재된 miniconda를 다운 받자. 윈도우 10 환경은 64-bit 이므로 아래 파일을 다운 받으면 된다. 

2. Minconda 설치를 수행한다. 

3. 윈도우 시작화면에서 Anacond Powershell Prompt(miniconda3)를 클릭하면, 아래와 같은 명령어 창이 뜬다. 

 

4. 여기서 부터 본격적인 딥러닝 환경 구축의 시작이다. 

    아래 그림과 같이 (base)>conda env list 를 실행시키면, 현재 환경(가상환경 포함)에는 base 밖에 없음을 확인할 수 있다. base에서 직접 작업하기 보다, 작업이나 프로젝트마다 다른 가상환경을 설정하는 것이 편리하다. 

5. 원하는 이름의 가상환경을 만들자. 여기서는 chpark. 생성된 뒤 마지막 설명처럼, 새로 생성된 가상환경을 활성화시키기 위해, >conda activate chpark 를 입력한다. 그러면, 맨 왼쪽에 (chpark)으로 바뀐 것을 볼 수 있다. 

6. tensorflow 설치

7. python 실행

8. python내에서 tensorflow 를 import 한다. 

이때, DLL을 발견할 수 없다는 에러가 발생하면, exit() 명령어를 쳐서 python을 종료하고, (chpark)가상환경에서 tensorflow를 제거하고 다시 버전 2.0으로 설치한다. 

 

9. 다시 python을 실행하여 import 를 수행하면, 제대로 작동한다. 

 

 

10. Keras 설치는 tensorflow 설치와 동일한 방법으로 수행한다. 

반응형
728x90
반응형

출처: 

https://lovetoken.github.io/r/machinelearning/keras/2018/06/02/keras_tutorial.html

 

 

 

R에서 Keras 튜토리얼 돌려보기

 

lovetoken.github.io

 

 

반응형
728x90
반응형

예측을 위한 순전파

신경망은 순전파 해서 결과를 예측한다. 

결과 레이어에 도달하기까지 모든 레이어에서의 연산이 포함된다. 

 

오차 역전파 (back propagation)

  • 가중치와 바이어스를 실제로 구할 때, 신경망 내부의 가중치 수정하는 방법(딥러닝에서 가장 중요한 부분 중 하나)
  • 경사 하강법의 확장 개념
  •  

단일 퍼셉트론에서의 오차 역전파

1. 임의의 초기 가중치를 사용하여 처음 결과값(y)을 구함.

2. 그 결과값과 참값(예상 또는 기대하는 값) 사이의 평균 제곱 오차(ε)를 구함.

3. 이 오차를 최소로 만드는 지점으로 조금씩 거슬로 이동하면서 미분... 경사 하강법

4. 미분의 기울기가 0인(0으로 수렴되는) 지점이 최적화된(수정된) 최종 가중치.

최적화의 방향은 출력층에서 시작해서 입력층... 따라서 "오차 역전파"라고 부름

 

다층 퍼셉트론에의 오차 역전파

단일 퍼셉트론과 같은 원리이나, 은닉층의 가중치를 구해야 함. 

1. 임의의 초기 가중치를 사용하여 처음 결과값(y)을 구함.

2. 그 결과값과 참값(예상 또는 기대하는 값) 사이의 평균 제곱 오차를 구함.

3. 경사 하강법을 이용하여, 오차가 작아지는(미분값이 0으로 수렴하는) 방향으로 이동시켜 가중치를 갱신함.

4. 오차가 더 이상 줄어들지 않을 때까지 (미분의 기울기가 0으로 수렴 할 때까지) 반복.

 

 

가중치 갱신의 수학적 표현

  • 실제 구해야 하는 값(가중치)는 출력값의 오차(ε)를 W에 대해서 편미분한 값. 
  • {가중치-기울기| --> 0 일때 까지 가중치를 계속 수정하는 반복작업

 

 

 

 

반응형
728x90
반응형

XOR 문제 해결

아래 그림과 같이 2차원 평면 공간을 3차원으로 확장해서 분류할 수 있음.

즉, 좌표 평면 변화를 적용.

 

XOR 문제를 해결하기 위해서는 2개의 퍼셉트론을 한번에 계산할 수 있어야 하는데, 은닉층(hidden layer)를 사용하면 가능함.

 

다층 퍼셉트론

1. 각 퍼셉트론의 가중치(w)와 바이어스(b)를 은닉층의 노드(n)로 보냄.

2. 은닉층으로 들어온 w, b에 시그모이드 함수를 적용하여 최종 결과값을 출력함

 

w와 b를 구하기 위해서 행렬로 표현하면, 

연습: XOR 문제 해결

아래 예제를 통해서, XOR 진리표를 구할 수 있는지 연습해 보자. 

먼저 각 노드 n1, n2를 구하고, 최종 y 출력값을 계산한다. 

 

 

 

반응형
728x90
반응형

진리표

컴퓨터 디지털 회로 gate 논리

AND: 둘다 1 이면 1

OR:   둘 중 하나라도 1 이면 1

XOR: 둘 중 하나만 1이면 1

분류기 퍼셉트론

 

XOR (exclusive OR) 문제

  • 그림처럼, 각각 두 개씩 다른 점이 있다고 할 때, 하나의 선을 그어 색깔별로 분류하는 방법을 생각해 보자.
  • 어떠한 한 개의 직선으로도 분류할 수 없다.... 1969년 Marvin Minsky 가 발견
  •  

 

XOR 문제 해결

  • 1990년대 다층 퍼셉트론(multilayer perceptron)으로 해결
  • 아래 그림과 같이 2차원 평면 공간을 3차원으로 확장해서 분류할 수 있음.
  • 즉, 차원 확장과 좌표 평면 변환 이용

 

  • XOR 문제를 해결하기 위해서는 2개의 퍼셉트론을 한번에 계산할 수 있어야 함.
  • 은닉층(hidden layer)을 가진 다층 퍼셉트론을 구현하여 가능.

 

 

다층 퍼셉트론

1. 각 퍼셉트론의 가중치(w)와 바이어스(b)를 은닉층의 노드(n)로 보냄.

2. 은닉층으로 들어온 w, b에 시그모이드 함수를 적용하여 최종 결과값을 출력함

 

w와 b를 구하기 위해서 행렬로 표현하면, 

연습: XOR 문제 해결

아래 예제를 통해서, XOR 진리표를 구할 수 있는지 연습해 보자. 

먼저 각 노드 n1, n2를 구하고, 최종 y 출력값을 계산한다. 

 

 

 

 

반응형
728x90
반응형

다변량 함수 알고리즘

  • 입력값(x)을 통해 출력값(y)을 구하는 다변량 회귀식은 아래와 같이 표현할 수 있음.

  • 출력값(y)을 알려면, a1, a2, b 값을 알아야함. 

 

  • 입력된 x1, x2는 각각 가중치 a1, a2와 곱해지고, b가 더해진 후 로지스틱 회귀함수인 시그모이드 함수를 거쳐 1 또는 0값이 출력됨.... 퍼셉트론(perceptron) 개념

 

퍼셉트론 (perceptron)

  • 1957년 프랑크 로젠블라트에 의해 고안됨.
  • 이후 인공 신경망, 오차 역전파 등의 연구개발을 거쳐 딥러닝으로 발전됨.

 

  • 인간 뇌의 뉴런의 신호 전달과 메커니즘이 유사.
  • 뉴런과 뉴런 사이의 시냅스 연결부위가 자극(입력값) 받으면, 시냅스에서 화학물질이 나와 전위 변화를 일으킴.
  • 전위가 임계치를 넘으면 다음 뉴런으로 신호를 전달(출력값 1)하고, 임계치 아래 자극이면 아무것도 하지 않음(출력값 0).... 로지스틱 회귀

 

  • 즉, 로지스틱 회귀가 퍼셉트론의 기본 개념
  • 퍼셉트론은 입력값과 활성화 함수를 사용하여 출력값을 다음 퍼셉트론으로 넘기는 단위 신경망임.

 

딥러닝 용어정리

가중치(weight): 기울기 a1, a2를 퍼셉트론에서는 가중치(weight)라고 하고 w1, w2으로 표기

바이어스(bias): 절편 b는 퍼셉트론에서 편향(bias)라고 함. 

가중합(weighted sum): 입력값(x)와 가중치(w)를 곱한 후 모두 더한 다음 바이어스(b)를 더한 값

활성화 함수: 0,1을 판단하는 함수. 예) 시그모이스 함수

 

 

 

 

반응형

+ Recent posts