반응형

0. Intro to Google Colab

 

Colab은 구글이 왜 구글인지를 알려주는 멋진 녀석입니다.

머신러닝을 처음 입문할 때 첫 난관은 다름이 아니라 개발환경을 구축하는 것입니다.

 

어마어마한 하드웨어의 가격은 물론이며, Cuda와 같이 생소한 녀석들과 다양한 파이썬 라이브러리들을 만나야 하죠.

 

Colab은 이러한 문제를 해결해주었습니다. "주피터 노트북"을 사용해보신 분들이라면 Colab에 접속하는 순간 친근한 느낌을 받을 수 있으실 겁니다. 왜냐하면 주피터 개발진들이 참여하여 만든거니까요~ ㅎㅎ

 

1. Colab 시작하기

Colab은 주피터 서버와 유사하지만 몇가지 알고가야할 부분이 있습니다.

 

  • 최대 12시간까지만 작업이 가능합니다.
    • Learning 상태로 방치해두면 중간에 커널이 죽은것을 보실수도 있습니다. 따라서 중간중간 weight와 loss를 저장하는 코드를 넣어야합니다.
  • 하드웨어 가속기(GPU/TPU)를 제공합니다.
    • [수정 -> 노트 설정] 또는 [런타임 -> 런타임 유형 변경] 에서 설정 
    • 암호화 화폐 채굴등을 수행할 경우 서비스 차단이 이루어 질 수 있습니다.
    • TPU는 머신러닝을 위해 Google에서 자체적으로 제작한 하드웨어로 GPU보다 월등한 성능을 보인다고합니다.
    • 실제 GPU와 TPU 차이를 테스트해본 적은 없으며, Keras 라이브러리는 TPU를 자동으로 잡지 못하기 때문에 별도 코드를 추가해줘야합니다.
    • GPU의 경우 약 14.6GB의 크기를 제공합니다.
  • 구글 드라이브와 연동이 가능합니다.
    • 파일을 직접 업로드하여 사용하는 것보다 구글 드라이브에 파일을 업로드하고 연동하는 것이 빠릅니다.
    • 코랩에 작성된 코드들은 모두 구글 드라이브에 저장됩니다.

 

2. Colab 알아보기

  • 단축키 설정하기 : [도구 -> 단축키]에서 원하는 단축키로 설정이 가능합니다.
  • 테마 : [도구 -> 환경설정]에서 "Dark"모드로 변경이 가능합니다.
  • Github 백업하기 : [파일 -> Github에 사본 저장]을 통해 Github와 연동하여 사본을 저장할 수 있습니다.
  • 입력효과 넣기 : [도구 -> 환경설정 -> 기타]에서 파워레벨을 설정에 따라 입력시 불꽃이 튀기는 효과를 줄 수 있습니다.
  • 리눅스 OS 버전 : Ubuntu 18.04를 사용중입니다.(현재 19년 7월 기준)

 

  • 하드웨어 사양 (CPU, RAM, DISK)

 

  • GPU 사양

반응형

'머신러닝 > 데이터 전처리' 카테고리의 다른 글

[데이터전처리] 1. Pandas in python  (0) 2019.05.30
반응형

몇가지 중요한 Widget 들에 대해서 다루겠습니다.

Widget의 이름과 해당 Widget이 갖고있는 주요 속성에 대해서 다루며, MainActivity.java에서 속성값을 변경하는 부분을 다룹니다.

 

 

1. TextView

1) XML

id : 객체를 구분하는 ID ( TV1 이라고 설정했습니다. )

Text : TextView에 들어갈 문자열

TextAppearance : 텍스트의 테마를 설정할 수 있습니다.

(기본적으로 몇개의 샘플 테마들이 저장되어있습니다.)

 

 

2) Java

다음으로 MainActivity.java파일을 아래와 같이 변경했습니다.

 

이전에 xml파일에서 만든 TV1이라는 TextView의 주소값을 갖고와서 저장할 변수가 필요합니다.

 

TextView text1 라는 코드를 통해서 text1이라는 변수를 만들었고요.

 

이후 setContentView를 통해서 activity_main.xml을 갖고온 후 findViewById라는 메서드를 통해서 위에서 만든 TextView의 ID값(TV1)을 통해서 해당 TextView를 갖고와 text1 변수에 넣어주었습니다.

 

이후 setText 메서드를 통해서 원하는 문자열도 글자를 변경할 수 있도록 해주었습니다.

(기존 문자열을 갖고오는 메서드는 getText입니다.)

 

실행결과

 

 

2. Button

1) XML

Button

다음으로 Button 위젯입니다.

 

id : btn으로 설정해주었습니다.

text : 버튼에 입력될 기본 문자열입니다.

onClick : 버튼을 누르면 실행될 액션

 

2) Java

아래는 Java파일에서 Button의 onClick메서드를 설정해주는 과정입니다.

 

보게되면 btnListener라는 class가 추가된 것을 볼 수 있습니다.

 

그리고 해당 클래스 객체를 생성해서 btn의 OnClickListener로 설정해 주는 것을 볼 수 있습니다.

 

Listener라는 녀석은 어떤 위젯이 정해져있는 특정한 액션을 실시할 때를 기다렸다가, 해당 액션이 발생되면 작성된 코드(기능)를 수행하는 기능을 하는 녀석입니다.

 

따라서 button(btn)을 누르면 Text가 변경되는 것을 볼 수 있습니다.

 

실행결과

 

의문... 그럼 Button 속성에 있던 onClick이라는 녀석은 어떻게 쓰는걸까?

onClick 속성과 같이 자주사용되는 기능에 한정해서 다른 방식으로 해당 기능을 수행할 수 있는 방법을 제공하고 있습니다.

 

먼저 아래와 같이 Java코드를 작성해줍니다.

 

Java

간단합니다. 별도 클래스 작업잆이 단 하나의 메서드를 생성하면 됩니다.

이렇게 해주고 xml파일에서 버튼의 onClick메서드를 보세요.

 

그럼 위와같이 방금 만든 녀석이 보이게 됩니다.

 

그냥 onClick에 저 녀석을 넣어주고, 실행하면 아래와 같이 잘 수행됩니다.

 

 

실행화면

간단하죠?

 

하지만, 자주사용되는 몇몇 기능에 한정되어 지원하기 때문에, 두가지 방법 모두 알아두셔야만 합니다!!

 

 

3. TextView + 2 Button

Q, 만약 버튼이 2개 이상이고, 버튼을 누르면 어떤 버튼이 눌렸는지 알려주는 TextView가 존재한다고 합니다. 그럼 하나의 Listener를 통해서 다수의 버튼 중 어떤 버튼이 눌렸는지 알려줄 수 있을까요?

 

A. 어렵지 않습니다. onClick(View v) 이라는 부분에 v라는 매개변수가 존재하는 것을 볼 수 있습니다.

이 v라는 녀석이 통해서 버튼을 구분할 수 있습니다.

 

 

위와같이 2개의 버튼과 textView를 만들었습니다. (괄호 안에 값 = ID)

 

다음으로 Java파일 내용입니다.

 

Java

보게되면, 거의 큰 차이는 없고, btnListener 영역에서의 차이가 있습니다.

 

v.getId() 라는 메서드를 통해서 버튼의 id값을 갖고오는데요. 보게되면 int값으로 저장하는 것을 볼 수 있습니다.

 

즉, 우리가 xml에서 작성한 id값을 java코드에서 갖고올때 문자열이 원형으로 갖고 오는것이 아니라, 구분할 수 있는 특정한 숫자값으로 갖고 온다는 것을 추측할 수 있습니다.

 

이렇게 갖고온 값은 R.id.btn 의 값과 동일합니다.

 

따라서 위와같은 방식으로 버튼을 구분할 수 있습니다.

 

 

 

다음으로는 라디오 버튼과 체크박스 위젯을 알아보겠습니다.

 

반응형
반응형

1. View

안드로이드 앱에서 보이는 모든 요소들을 View라고하며, 이것은 View라는 Class를 상속받아 사용됩니다.

 

전에 보았던 activity_main.xml에서 '버튼', '이미지뷰', '텍스트상자' 등을 추가하면 이것들은 하나하나가 View클래스를 상속받아 사용되게됩니다.

 

즉, View라는 클래스는 모든 UI요소들의 부모클래스가 되게됩니다.

 

View는 레이아웃위젯으로 분류됩니다.

 

2. Widget(위젯)과 Layout(레이아웃)

위젯은 버튼, 텍스트상자와 같이 특별한 기능을 갖고있는 View를 의미합니다.

 

간단하죠?

 

다음으로 레이아웃은 컨테이너라고 불리기도 합니다.

 

독립적으로 특별한 기능을 갖고있다기 보다는 다른 뷰(레이아웃/위젯)를 포함하는 틀이라고 볼 수 있습니다.

 

쉽게 생각해서 한글에서의 표가 내부에 글자나 이미지 또는 또 다른 표를 넣을 수 있듯이, 레이아웃도 내부에 Button이나 ImageView와 같은 위젯 또는 또 다른 Layout을 넣을 수 있습니다.

 

여러 종류의 레이아웃들이 존재하는데 크게 Linear와 Relative로 볼 수 있습니다.

3. Linear Layout

가장 많이 사용되는 레이아웃의 종류로 좌에서 우 또는 상에서 하로 내부에 View를 쌓는 Layout입니다.

 

처음 프로젝트를 생성하고, [ activity_main.xml ] 의 하단에보면 Design과 Text가 있는데 Text로 이동해보면 아래와 같은 모습을 볼 수 잇습니다.

 

activity_main.xml의 Text

Text영을 클릭하면 좌측에는 xml코드가, 우측에는 xml의 이미지 미리보기가 표시됩니다.

 

여기서 조금 수정해서 Linear Layout으로 변경해보겠습니다.

 

 

위와같이 처음 Layout영역을 LinearLayout으로 변경해주고, android:orientation="vertical" 속성을 추가해주었습니다.

 

일부 입력으로 자동완성이 가능해서 복사 가능하게 올리지는 않았습니다.

 

다시 Design으로 돌아가서 Button들을 몇개 넣어보겠습니다. (좌측의 Buttons에서 몇개의 버튼들을 끌어넣으면 됩니다.)

 

5개의 Button을 넣었더니 미리보기 영역에 위와같이 버튼들이 들어간 것을 볼 수 있습니다.

 

즉, LinearLayout의 vertical 속성은 상에서 하 방향으로 View들이 들어가는 것을 볼 수 있습니다.

 

만약 horizontal으로 값을 넣었다면 좌에서 우로 View들이 들어가는 것을 보실 수 있습니다.

 

또한 Button과 같은 View들은 여러개의 속성들을 갖고있습니다.

 

Design영역에서 Button을 클릭하면 우측에 속성들이 표시되는 것을 볼 수 있습니다.

 

몇가지 대표적인 것들을 정리하면 아래와 같습니다.

 

  • id : xml에서 생성한 View를 구분하는 명칭입니다.
  • layout_width : View의 가로 길이
  • layout_height : View의 세로 길이
  • margin : View의 외부 여백
  • padding : view의 내부 여백
  • layout_gravity : View의 위치 정렬 기준
  • gravity : View 내부 요소들의 정렬 기준
  • background : View 배경(색/이미지 등)

4. Relative Layout

Relative Layout은 레이아웃 내부의 다른 View들 간의 관계를 통해서 Layout내부에서의 위치를 결정하는 종류의 Layout입니다.

 

예를들어 Button1과 Button2가 있다면, [ Button2는 Button1의 5dp아래에 존재한다 ] 라고 정의하는 형식입니다.

 

간단한...가요?

 

실제로 만들어서 건들여보시면 쉽게 이해하실 수 있습니다.

반응형
반응형

간단하게 Activity의 상태변화에 따라 실행되는 메서드들에 대해서 다루고 넘어갑니다.

(Activity의 생명주기 변화에 따른 실행 메서드를 의미합니다.)

 

- on 메서드

  • onCreate : Activity 생성될 때, 화면회전이 발생할 때 자동으로 호출됨
  • onStart : onCreate 실행 후, Activity가 정지상태에서 활동상태로 이동할 때 호출(홈버튼눌러서 화면 이동 후 다시 앱으로 돌아올 때)
  • onResume : onStart 실행 후, Activity가 일시정지 후 다시 돌아올 때 호출(일시정지 = 앱 위에 팝업창이 떴다가 없어질 때)
  • onRestart : Activity가 정지 상태 후 활동 상태로 돌아갈 때, onStart 이전에 실행됨
  • onPause : 일시 정지 상태일 때 호출, 화면상에서 Activity가 사라지거나, 팝업창 등이 나타날 때 호출
  • onStop : Activity가 화면에서 사라질 경우
  • onDestroy : 현재 Activity(APP)가 완전히 제거될 경우(앱종료)

 

onCreate : 앱이 최초로 실행할 때 수행되야 하는 코드를 넣어줍니다.

onPause : 앱이 무슨 이유로든 사용불가 상태가 될 경우 수행될 코드를 넣어줍니다.

onResume : 앱이 수행상태로 이동했을 때 필요한 코드를 넣어줍니다.

onDestroy : 앱이 종료될 경우 필요한 코드를 넣어줍니다.

반응형
반응형

0. 시작하기전에

  • 개인사정으로 윈도우 환경이 아닌 맥(OSX)환경에서 개발을 진행하겠습니다.(큰 차이는 없습니다.)

 

1. Android 구성요소

안드로이드의 4대 구성요소에 대해서 간단히 보면 아래와 같습니다.

  • Activity : 현재 화면에 대한 작업을 담당
  • Service : 어플리케이션이 Background에서 수행하는 작업 담당
  • Broadcast Receiver : 시스템을 감시하다 특정 이벤트에 대한 작업 담당
  • Content Provider : 데이터 공유 작업을 수행하는 작업 담당

 

2. AndroidManifest.xml

app -> manifests 를 보시면 [AndroidManifest.xml]이 존재합니다.

 

해당 파일에 제작하는 앱의 기본사항을 명시해줘야합니다. 때문에 어떻게보면 가장 중요한 파일이라고 볼 수 있습니다.

 

클릭해보시면 위와같은 코드가 적혀있는 것을 볼 수 있습니다.

 

보시게되면 android: ~ 영역이 보이는데요. 몇개만 보면

 

allowBackup : 백업 기능의 할성화

icon, roundIcon : 앱의 아이콘 이미지 설정

label : 앱의 이름

 

위와같은 기능을 담당한다고 볼 수 있습니다.(나중에 천천히 다뤄보겠습니다.)

 

이 후 <activity android:name=".MainActivity">라는 영역이 있습니다.

 

해당 영역은 MainActivity에 대한 내용을 담고있습니다.

 

하위의 action 영역을보면 "android.intent.action.MAIN"이라는 부분이 있는데요.

 

이 녀석을 Action으로 갖고있는 녀석이 앱 실행시 가장먼저 수행되는 Activity라는 의미를 갖고있습니다.

 

따라서 android.intent.action.MAIN은 오로지 하나만 존재하며, 두개이상 존재할 경우 최상위에 적혀있는 1개만 작동하게됩니다.!!!

 

 

2. MainActivity

처음 프로젝트를 생성하면 MainActivity라는 녀석이 생깁니다.

 

위에서 언급했듯이 android.intent.action.MAIN을 Action으로 갖고있는 이 MainActivity가 앱 실행시 최초로 실행되는 Activity가 되게됩니다.

 

아래와 같이 생겼습니다.

 

 

기본적으로 보게되면 위와같이 생겼는데요.

 

onCreate라는 녀석이 Override되어있는 것을 볼 수 있습니다.

 

onCreate는 Activity가 생성될 때, 그리고 화면 회전이 발생할 때 자동으로 호출되게됩니다.

 

즉, 처음 앱을 실행하면 onCreate에 작성된 코드가 실행이 되게됩니다.

 

보면, setContentView(R.layout.activity_main)라는 부분이 있습니다.

 

R은 res를 의미합니다. 아래 경로를 참고하세요.

 

위와같이 res(=R) 이하의 layout -> activity_main.xml이 존재하는 것을 볼 수 있습니다.

 

아직 setContentView라는 녀석이 무슨 기능을 하는지 언급하지 않았지만, activity_main.xml을 클릭해보면 아래와 같은 모습을 볼 수 있습니다.

 

벌써 느낌이 오시죠?

 

3. activity_main.xml

위에서 보신것 처럼, 이 파일은 눈에 보이는 영역에 대한 디자인을 담당하는 파일입니다.

 

위에 보이는 화면외에도 좌우 메뉴를 보시면 Button이나 ImageView같은 녀석들을 볼 수 있습니다.

 

이런 녀석들을 이용해서 앞으로 앱을 꾸며가겠습니다.

 

 

 

 

4. 정리

오늘 가장 중요한 3개의 파일을 봤습니다.

onCreate외에도 Activity의 상태에 따라서 수행되는 여러개의 메서드가 존재합니다.

 

이러한 메서드에 대해서는 다음 페이지에 간단하게 정의하고 넘어가겠습니다.

반응형
반응형

[안드로이드 9.0] 입문하기

0. 시작하기전에

  • 해당 포스터는 Java언어를 이용하고 있습니다. 코틀린관련 포스터는 차후에 다룰 예정입니다.
  • Java언어의 기본 문법은 다루지 않습니다.
  • 안드로이드 스튜디오(+에뮬레이터)를 실행을 위해서 충분한 컴퓨팅 성능이 필요합니다.
  • 작성일(19.07.05)일 기준 최신버전 프로그램을 이용합니다.
  • 안드로이드 스튜디오와 기타 프로그램을 위해서 최소 30GB이상의 용량이 필요합니다.

1. Android 계층구조

 

구글 레퍼런스

맨 아래 Linux Kernel 계층부터 System App 부분까지로 안드로이드는 구성되어있습니다.

 

각 계층의 역할은 다음과 같습니다.

 

  • System App : OS에 내장되어있는 기본 어플리케이션
  • JAVA API Framework : 구글에서 제공하는 개발자용 라이브러리
  • Native C/C++ Libraries : 안드로이드OS가 C언어 코드를 동작시키기 위한 영역
  • Android Runtime(ART) : 앱 설치시 Java코드를 네이티브 코드로 변환하여 설치(속도향상)
  • HAL : 리눅스 커널과 단말기 하드웨어의 통신을 담당
  • Linux Kernel : 안드로이드의 기본 OS인 리눅스 커널

보통 개발에 있어서는 System APP, Java API Framework 영역만 신경써도 괜찮습니다.

 

2. 개발환경 구축

 1) JDK 8.0 설치(아파치 연동을 위해 8버전을 사용)

 

다운로드 URL : https://www.oracle.com/technetwork/java/javase/downloads/index.html

JDK 8 버전 설치 -> JDK
약관 동의 후 본인 OS에 맞게 설치

현재 JDK 8을 설치하기 위해서는 오라클 계정을 갖고있어야합니다.

(가입되어있지 않으시다면 이참에... 크흠...)

 

가입 후 설치시 기본 저장위치를 수정하시면 별도로 환경변수 설정이 필요합니다.

 

 2) 안드로이드 스튜디오 설치

 

다운로드 URL : https://developer.android.com/studio/

 

Download Android Studio and SDK tools

developer.android.com

 

안드로이드 스튜디오 3.4.1을 설치하였습니다.

 

별도 경로 수정등의 과정 없이 기본으로 설치하였습니다.

 

 

설치가 완료되면 실행시켜봅니다. 그럼 아래와 같은 모양이 뜸니다.

 

실행시 첫 화면

위 창에서 그냥 OK버튼을 누르시면 아래와 같은 창이 나옵니다.

 

위와같은 상태 이후 계속 Next하시면됩니다. 중간에 테마설정이 있는데, 저는 어두운 화면인 [드라큘라]를 선택했습니다.

 

설치 화면

ps, 설치과정에서 관리자 권한을 요청할 경우 꼭 수락해주시기 바랍니다.

 

 

3) 안드로이드 스튜디오 셋팅

 

안드로이드 스튜디오 초기화면

위와같이 설치가 종료되면 맨 위 [Start a new Android Studio project]를 클릭합니다.

 

그다음 [Empty Activity] 선택 후 [Next]를 누르시면 아래와 같은 창이 보입니다.

 

여기서 수정해야할 부분은 Language부분, 저는 코틀린이 아닌 JAVA를 사용하기 때문에 수정해줍니다.

 

Minimum API level은 지원할 안드로이드 OS의 최저 버전입니다.

 

설정 후 Finish클릭!

 

그럼 프로젝트가 실행되는데 하단에 아래와 같은 것을 볼 수 있습니다.

 

이건 안드로이드 스튜디오에 필요한 추가적인 것들을 설치하고 셋팅하는 과정입니다. 최초 설치 후 1회면 하면되기 때문에 완료될 때까지 커피한잔...

 

완료되면 프로그램 상단에 아래와 같은 버튼을 볼 수 있습니다. 안드로이드 에뮬레이터를 설정하는 버튼입니다.

 

클릭 후 [Create Virtual Device...]를 클릭해주시면 아래와 같은 화면이 보입니다.

 

에뮬레이터에서 실행할 휴대폰을 선택하는 부분입니다. 다는 구글의 Pixel2를 선택했습니다.

 

다음은 해당 디바이스에 설치될 OS의 버전을 선택하는 부분입니다. 가장 최신 9.+ 버전을 설치하도록 하겠습니다.

 

Q 옆에 Download를 클릭해서 설치하실 후 설치가 완료되면, 선택 후 Next -> Finish

 

그런다음 초록색 실행버튼을 클릭해보면 에뮬레이터가 실행됩니다.

 

 

짠~

 

일단 여기까지~!

반응형
반응형

<라즈베리파이> cron 을 이용하여 작업예약

 

1. 터미널 열기

 

2. 'crontab -e' 입력 (입력기 선택이 나올경우 원하는 것을 선택 ex. nano )

 

3. 마지막줄에 이벤트 추가

 

* * * * * 실행할 작업

 

* 로 입력된 부분에 반복하여 수행할 날을 적어줄 수 있습니다.

 

앞에서부터 " 분(0~59), 시(0~23), 일(1~31), 월(1~12), 주(0~7)

 

주(week)는 0(일요일) ~ 6(토요일)을 의미합니다. ('7'도 일요일)

 

 

Ex) 매일 자정에 실행되는 스크립트

0 0 * * * /home/pi/test.sh

 

Ex) 매주 월요일 정오에 실행되는 파이썬 프로그램

0 12 * * 1 python /home/pi/test.py

 

Ex) 리부팅시에 작업 실행하기

@reboot python /home/pi/test.py &

 

 

위와같이 사용 할 수 있으며, 실행할 작업은 터미널에 적었을때 실행이 되는 방식과 동일하게 작성해야합니다.

 

4. crontab -l 입력 (예약된 작업을 확인 할 수 있습니다.)

반응형

'프로그래밍 > 라즈베리파이' 카테고리의 다른 글

라즈베리파이 부팅시 자동 실행  (4) 2019.07.04
반응형

<라즈베리파이> 부팅시 자동 실행

 

라즈베리파이를 이용하여 부팅시 자동으로 특정한 명령이 수행되도록 하는 방법

 

알려진 여러가지 방법이 있지만, 실제로 실행이 안되는 경우가 많이 있습니다.

 

 

제가 해본 여러가지 방법중에 아직까지는... 문제가 없던 방법입니다.

 

1. sudo nano /etc/profile 

root 권한으로 해당 파일을 수정합니다.

 

 

2. 해당 파일의 마지막줄에 아래 예시와 같이 실행할 작업을 적어주시면 됩니다.

sudo python3 /var/www/new/Flask/index.py

반응형

'프로그래밍 > 라즈베리파이' 카테고리의 다른 글

라즈베리파이 작업 예약하기  (0) 2019.07.04
반응형

아래 파일과 파일 내용입니다.

tasks.json
0.00MB

{
 {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build_gcc",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.out",
                "${file}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "build_g++",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.out",
                "${file}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "exec",
            "type": "shell",
            "command": "${fileDirname}/${fileBasenameNoExtension}.out",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
반응형

'IDE > VScode' 카테고리의 다른 글

[MAC] VSCode로 C/C++ 사용하기 (3/3)  (2) 2019.01.02
[MAC] VSCode로 C/C++ 사용하기 (2/3)  (8) 2018.12.29
[MAC] VSCode로 C/C++ 사용하기 (1/3)  (0) 2018.12.29
반응형

거의 한달만에 다시 작성하네요... ㅎㅎ

코딩시간은 기존에 해뒀던 자료이용써서 5분인데...

 

Keras와 CNN 모델로 Mnist데이터 학습시키기

0. 시작전에

- Keras는 Tensorflow를 사용하는 라이브러리입니다. 따라서 Keras설치시 Tensorflow를 먼저 설치해야합니다.

- Keras와 Tensorflow 설치는 다루지 않습니다.

- 이전 Tensorflow로 CNN조지기 편을 보신 후 와주시면 좀 더 이해하기 좋습니다.

2019/05/30 - [머신러닝/CNN] - [딥러닝 CNN] 1. CNN이란?

2019/05/31 - [머신러닝/CNN] - [딥러닝 CNN] 2. mnist데이터 CNN으로 조지기(with, Tensorflow)

1. 시작

1) 주피터 노트북을 켜주시고, 아래와 같이 라이브러리와 데이터를 불러와줍니다.

이전에 Tensorflow편에서 다뤘던 Mnist자료를 그대로 사용했습니다.

 

 

2) 다음으로 아래와 같이 변수들을 설정해주었습니다.

 - IMG_CHANNELS : 이미지 채널의 수를 말합니다. (ex, rgb = 3)

 - IMG_ROWS, IMG_COLS : 이미지의 가로, 세로 픽셀의 수를 말합니다.

 - BATCH_SIZE : Batch 사이즈를 설정합니다.

 - EPOCH : Epoch의 수를 설정합니다.

 - NB_CLASSES : Y값이 몇개의 값을 갖고 있는 배열인지를 의미합니다. 우리는 0~9까지 One-hot결과를 Y값으로 사용하기 때문에 10으로 설정해주었습니다.

 - VERBOSE : Keras의 학습 단계에서 진행상태를 어떻게 표시할 것인지를 설정해주는 것입니다.

         (0 = silent, 1 = progress bar, 2 = one line per epoch.)

 - VALIDATION_SPLIT : 학습시 데이터를 일부 나눠서 Validation으로 사용할 비율을 의미합니다.

         (mnist데이터에 validation data가 별도로 존재하기는 하지만, 그냥 Train데이터의 20%를 사용했습니다.)

 - OPTIM : 옵티마이저를 어떤것으로 사용할 것인지를 의미합니다.

 

 

3) 데이터 셋팅하기

 

학습하기 좋은 상태로 데이터를 만들어줍니다.

X데이터 = [ 55000개의 이미지, 28x28의 크기, 1개의 채널 ] 을 의미합니다.

 

이미지를 학인해보면 위와같은것을 볼 수 있습니다.

배열에 One-hot으로 0~9까지의 값이 나타나는 것을 볼 수 있습니다.

 

 

4) 모델 구축하기

모델은 정말 단순하게 만들었습니다.

 

Convolution 단계 하나를 거친 후 바로 Flatten해서 바로 하나의 네트워크를 거쳐 Y값으로 나가는 정~~~~말 간단한 모델입니다.

 

 

5) 학습시키기

 

간단한 모델을 사용해도 이정도 정확도... ( Adam의 힘인가... )

맥북에서 학습시켰더니 역시 CPU버전이라 그런지 느리더군요....;;

 

 

6) 결과 확인하기

 

evaluate 함수를 이용해서 최종적으로 test accuracy를 확인해보니 98.7% 정도가 나오네요.

>> 양호

 

X_test 데이터중 하나를 뽑아서 확인해보니 위와같은 결과를 볼 수 있었습니다.

 

누가봐도 6인 데이터고, 모델도 예쁘게 6이라고 잘 예측한 것을 볼 수 있었습니다.

 

착하다 ㅎㅎ

 

 

2. 마무리

mnist 데이터 자체가 너무 잘 만들어진(?) 데이터여서 CNN을 이용하면 어떻게 해도 90%이상의 Accuracy를 얻을 수 있습니다.

그러니 여러분들도 한번 자기만의 방법으로 모델을 만들어보시기 바랍니다. ( 옵티마이저를 변경하는 것만으로도 차이가 크니 Adam추천 )

 

Keras로 모델을 구현할 때 저는 Dense를 사용했는데, 다른 방법도 존재합니다. 그부분은 다음에 다루겠습니다.

 

이 다음에는 어떤 이미지를 학습할까 고민중되네요.

반응형

+ Recent posts