분류 전체보기
[Java] 네트워킹 (Networking) 1
[Java] 네트워킹 (Networking) 1
2021.12.05컴퓨터간의 관계를 서버와 클라이언트로 구분할 수 있다. 서비스를 제공하는 쪽이 서버이고 제공받는 쪽이 클라이언트가 된다. 하나의 서버가 여러 가지 서비스를 제공하기도 하고, 하나의 서비스를 여러 대의 서버로 제공하기도 한다. 서버는 서버 일만, 클라이언트는 클라이언트의 일만 하는 모델을 서버기반 모델이라고 한다. 파일 공유 시스템(Torrent)에서 많이 사용하는 모델으로 P2P 모델이 있다. 각각의 클라이언트들이 서버의 역할도 수행하는 모델이다. 우리는 보통 클라이언트의 역할을 한다. 서버에 접속하기 위해서는 특별한 경로, 특별한 식별자가 필요한데 이를 IP주소라고 한다. 이 IP주소를 바탕으로 컴퓨터들을 구분한다. IP주소는 4바이트와 6바이트로 나타낼 수 있는데, 원래는 4바이트를 많이 사용했는데 ..
[Android] 네트워킹 1
[Android] 네트워킹 1
2021.12.05네트워크를 이용해 서버에 데이터를 요청하고 응답받아 다른 사용자와도 소통해보자. 클라이언트는 서버에 데이터를 요청하고 서버는 그 요청에 대해 응답하는 형식의 2-tier 모델이 있다. 이 경우에 서버가 직접 데이터베이스를 다루고 만약 데이터베이스를 다루는 방식에 변화가 있으면 클라이언트에도 문제가 생긴다. 이 문제를 해결하기 위해 3-tier 모델이 도입됐다. 클라이언트와 서버가 소통하는 점에서는 2-tier 모델과 같지만, 서버를 응용 서버와 데이터 서버로 분리해 데이터를 관리하는 서버를 따로 구성하는 부분에서 차이가 있다. 이 외에도 서버를 두지 않고 단말끼리 서버와 클라이언트 역할을 하는 P2P모델도 있는데, 자세한 내용은 데이터베이스를 공부할 때 다루기로 하고 지금은 이 정도만 공부하자. 소켓을 ..
Machine Learning - RNN
Machine Learning - RNN
2021.12.05RNN (Recurrent Neural Networks) 지금까지 배웠던 것들을 생각해보자. 처음에 DNN (Deep Neural Networks)에 대해 배웠고, 다음으로 영상과 이미지 처리에 효과적인 CNN (Convolution Neural Networks)을 배웠으며 이제는 series에 대한 정보를 다룰 때 유용한 RNN에 대해 배울 차례이다. DNN Parameter가 급격하게 많아지는 단점이 있다. CNN Parameter를 줄일 수 있다. backpropagation을 수행하는 점은 DNN과 동일함. RNN RNN은 순차적인 데이터의 처리에 적합하다. ex. 시간에 따라 순차적인 입력이 들어오는 음성, 음악 상태 정보 등.. RNN을 음성인식에 사용하는 예시를 생각해보자. 우리는 음성을 직..
Deep Learning - CNN
Deep Learning - CNN
2021.12.05딥러닝의 활용 분야인 CNN (Convolutional Neural Network) 에 대해 알아보자. 영상을 볼 때 우리는 영상을 보지만, 컴퓨터는 숫자를 본다. 이미지는 행렬 기반으로 표현된다. 예시로 위와 같이 6x6 size의 행렬이 있을 때 3x3행렬을 * 연산 해 줄 수 있는데 이 연산을 Convolution이라고 한다. (선형대수의 곱셈과 convolution은 다름) 큰 수일수록 밝고 작은 수일수록 어둡다고 하자. convolution 연산 과정을 살펴보자. 3x3행렬로 나눈 다음 각 요소에 따라 연산을 진행한다. 완료된 연산은 오른쪽의 결과 행렬에 적는다. 위 방법을 반복해서 4x4 행렬을 완성한다. 예시의 연산을 마치면 위와 같이 나온다. 여기서 3x3행렬은 Filter라고 하는데 딥러..
Advice for Applying ML/DL (2)
Advice for Applying ML/DL (2)
2021.12.04Training 보다 Testing의 결과가 좋지 않을 때, 이 문제를 Bias와 Variance의 문제로 나눌 수 있다. 위의 문제를 Regularization을 통해 해결했었고, 이 문제가 Bias때문에 발생했는지 Variance 때문에 발생했는지 확인할 때 Learning Curve를 사용한다. 이번 시간에는 Bias 와 Variance에 대해 알아보고 위의 과정에 대해 알아보자. 사진에서는 d=2일 경우에 적당하게 튜닝됐다고 할 수 있고 나머지의 경우는 Underfit 혹은 Overfit 상태이다. 여기서 underfit의 경우 High bias가 끼어있다고 표현한다. 이 경우 데이터를 아무리 많이 박아도 문제는 해결되지 않는다. 다음으로 overfit의 경우에는 High variance의 문제를..
Advice for Applying ML/DL (1)
Advice for Applying ML/DL (1)
2021.12.04Training에서는 잘 되지만, Testing에서는 잘 작동하지 않는 경우가 많이 있다. 이런 경우에 Traditional Machine Learning과 Deep Learning 모두에 적용될 수 있는 몇 가지 해결방법이 있다. 이번 시간에는 그 해결방법에 대해 알아보자. 1. Evaluating a hypothesis 2. Model selection and training/validation/test sets 머신러닝에 대해 배울 때, 특정 모듈에 대해서 공부했었다. Evaluating a hypothesis는 여기서 어떤 모듈을 사용할지.. 라고 이해하자. 딥러닝 관점에서 생각해 볼 때는, Layer를 1단으로 설정할 지, 10단으로 설정할 지.. 몇 단으로 설정할지와 특정한 Activation..
Deep Learning (4)
Deep Learning (4)
2021.12.03Multi Layer Perceptron의 개념을 바탕으로 자연어처리(NLP)와 같은 딥러닝의 응용 부분으로 확장할 때 먼저 학습해야하는 개념이 있다. 이번 시간에는 그 개념들에 대해 알아보자. 1. Normalizing inputs 2. Batch/Mini-batch 1. input을 정규화 한다.. 라는 의미를 가진다. Backpropagation으로 정규화를 진행할 때, 입력값으로 주어지는 x1과 x2의 값의 차이가 크면, (ex. x1은 1,000,000 / x2는 50) 학습을 진행할 때 큰 문제가 발생하게 된다. 따라서 두 입력값의 scale을 맞춰 주는 것이 필요한데, 여기서 두 입력값에 대해서 normalization을 진행하는 방법은 학습에 큰 도움이 되지 않는다. 그러면 어떤 방법으로 ..
[Java] 입출력 (I/O) 2
[Java] 입출력 (I/O) 2
2021.11.29지난 시간에 바이트기반 스트림에 대해 알아봤으니 이번에는 문자기반 스트림에 대해 알아보자. 바이트기반 스트림과 문자기반 스트림은 매우 유사하다. 집중해서 봐야 할 부분은 byte[] 에서 char[]로 바뀌었다는 점이다. 단위만 문자 단위로 쓰는구나... 라고 생각하고 공부하자. 위쪽 부분에서 FileInputStream은 바이트단위로 처리하고, FileReader는 문자 단위로 처리한다. FileInputStream을 통해 파일 내용을 읽게 되면 영어는 1바이트로 처리할 수 있어 제대로 처리되지만, 한글은 2바이트가 이상이기 때문에 (UTF-8 16 인코딩에 따라 다르긴 함) 텍스트가 깨진다. 똑같은 문장을 FileReader로 읽을 경우에는 문자 단위로 처리하기 때문에 텍스트가 깨지지 않는다. Pip..
[Android] 내용 제공자 (Content Provider)
[Android] 내용 제공자 (Content Provider)
2021.11.29한 앱에 대해서 데이터베이스를 만들고 만든 데이터베이스를 다른 앱에서 사용할 수는 없을까? 이 때 내용 제공자를 통해서 데이터베이스에 접근할 수 있다. (앱의 보안과 연관됨) 내용 제공자를 사용하기 위해서 새로 내용 제공자를 만들 수도 있지만, 이미 만들어져있는 내용 제공자를 사용해 정보를 가져오는 부분에 집중해서 공부하자. 안드로이드 앱의 구성요소로 액티비티 / 서비스 / 방송 수신자 / 내용 제공자가 있는데 마지막 부분인 내용 제공자에 대해 알아보자. 내용 제공자도 앱의 구성요소 중 하나이기 때문에 시스템에서 관리한다. 여기서 내용 (Content)에는 전화번호, 이미지, 텍스트 등등.. 여러가지가 될 수 있다. 내용 제공자를 사용할 때는 Resolver 객체를 사용한다. 우리가 얻으려는 데이터는 네..
[Java] 입출력 (I/O) 1
[Java] 입출력 (I/O) 1
2021.11.21컴퓨터에서 제일 기본적인 입력 장치는 키보드이고, 출력 장치는 모니터이고 키보드와 모니터를 Standard Input output으로 말한다. Java에서 출력을 처리할 때 System.out.println등등 비슷한 메서드를 사용하고 입력을 받을 때는 Scanner 클래스를 이용해 처리하는데 이런 방법 말고 입력과 출력의 소스를 다르게 했을 때는 어떻게 처리 할 수 있을까? 입력과 출력을 합쳐서 입출력 (Input / Output) 이라고 하고 두 대상 간의 데이터를 주고 받는 걸 의미한다. 입력을 받을 때 쓰이는 통로와 출력을 처리할 때 쓰이는 통로는 각각 따로 정의돼야 하고, 이 통로를 Stream 이라고 한다. (입력스트림 / 출력스트림) 스트림은 바이트 단위로 데이터를 전송하고 입출력의 대상에 ..
[Android] 모바일 데이터베이스
[Android] 모바일 데이터베이스
2021.11.21지금까지 만든 앱들은 앱의 작동이 종료될 시 데이터가 다 사라졌었다. 하지만, 전화번호부 앱을 만든다고 생각할 때 앱을 종료시켰을 때 데이터가 모두 사라지면 앱의 의미가 없다. 앱을 종료하더라도 종료 전까지의 데이터는 저장되어야 하고, 이 때 데이터베이스가 사용된다. 안드로이드에서는 SQLite라는 모바일 데이터베이스가 내장되어있고, SQLite를 통해 많은 양의 데이터를 효과적이고 체계적으로 관리할 수 있다. 데이터베이스는 테이블 형태로 저장된다. 학생 데이터를 저장한다고 생각하면, 이름 전화번호 학번 학과 등의 데이터가 테이블 형태로 저장된다. 데이터베이스를 만드는 방법으로는 Context 클래스의 openOrCreateDatabase 메서드를 사용하는 방법이 있다. 데이터베이스를 다루는 메서드들이다..
[Android] 음악 재생 플레이어 만들기
[Android] 음악 재생 플레이어 만들기
2021.11.21몇 가지 기능이 있는 음악 재생 플레이어를 만들어보자. 소스코드 더보기 package kr.ac.cnu.computer.seekbar; import android.media.MediaPlayer; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity {..