오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_87 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_87

chan_96 2022. 4. 21. 18:10
728x90

머신러닝

딥러닝(Depp Learning)

사람의 신경망을 모방하여 기계가 병렬적 다층 구조를 통해 학습하도록 만든 기술

기계는 판단하는 기준이 명확히 정해져있다

하지만 사람은 대상을 판단하는 경계가 느슨하다(추상적)

대량의 데이터에서 복잡하고 계층적인 패턴을 찾아내는 능력이 뛰어나다

다층 퍼셉트론(Multilayer Perceptron)


from tensorflow.keras.datasets import mnist # 손글씨데이터

(X_train,y_train),(X_test,y_test) = mnist.load_data()
X_train.shape, y_train.shape 
# ((60000, 28, 28), (60000,))
X_test.shape, y_test.shape
# ((10000, 28, 28), (10000,))
# matplotlib로 시각화하기
import matplotlib.pyplot as plt

plt.imshow(X_train[0])
plt.show()

from tensorflow.keras.models import Sequential # 딥러닝 모델의 뼈대
from tensorflow.keras.layers import InputLayer, Dense # 입력층, 중간/출력층

# 모델 정의
model = Sequential() # 딥러닝 모델의 뼈대 생성
model.add(InputLayer(input_shape=(784,))) # 입력층 추가
model.add(Dense(units=20, activation='sigmoid')) # 중간층 추가
model.add(Dense(units=40, activation='sigmoid')) # 중간층 추가
model.add(Dense(units=30, activation='sigmoid')) # 중간층 추가
model.add(Dense(units=10, activation='softmax')) # 출력층 추가 (10개의 확률)

# 모델학습
# 1. 모델의 학습방법 및 평가방법 설정
model.compile(loss='sparse_categorical_crossentropy',
             optimizer="Adam",
             metrics=['accuracy'])
# 2. 모델학습
model.fit(X_train.reshape(60000,784),y_train,epochs=50)

2. 모델학습

# 모델 예측
pre = model.predict(X_test.reshape(10000,784))
pre.shape # (10000, 10)

plt.imshow(X_test[242])
plt.show()
pre[242]

# 모델 평가
pre_classes = pre.argmax(axis=1)
pre_classes # array([7, 2, 1, ..., 4, 5, 6], dtype=int64)

!pip install sklearn
from sklearn.metrics import accuracy_score
accuracy_score(y_test,pre_classes)
# model내부에 평가함수
model.evaluate(X_test.reshape(10000,784),y_test)
# [0.2716909945011139, 0.9178000092506409]

# 모델 저장
model.save('./hand_write_digit_model.h5')

딥러닝 역사 - 퍼셉트론 제안

XOR 문제

XOR 문제 해결 (MLP)

다층 퍼셉트론 (Multilayer Perceptron)

퍼셉트론을 여러 개의 층으로 구성하여 만든 신경망


안드로이드

LoginActivity.java 코드

더보기
package com.example.ex0419;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class LoginActivity extends AppCompatActivity {

    EditText edtUserId, edtUserPw;
    Button btnLogin, btnJoin;

    RequestQueue queue;
    StringRequest request;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        edtUserId = findViewById(R.id.edtUserId);
        edtUserPw = findViewById(R.id.edtUserPw);
        btnLogin = findViewById(R.id.btnLogin);
        btnJoin = findViewById(R.id.btnJoin);

        queue = Volley.newRequestQueue(LoginActivity.this);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                int method = Request.Method.POST;
                String server_url = "http://59.0.236.34:8081/android/Login";

                request = new StringRequest(
                        method,
                        server_url,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                Toast.makeText(LoginActivity.this,
                                                "로그인성공>> "+response,
                                                Toast.LENGTH_SHORT).show();
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                Toast.makeText(LoginActivity.this,
                                                "로그인실패>> "+error.toString(),
                                                Toast.LENGTH_SHORT).show();
                            }
                        }
                ){
                    @Nullable
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        //key와 value형태로 데이터를 저장하는 자료구조 --> Map
                        Map<String, String> param = new HashMap<>();
                        param.put("id",edtUserId.getText().toString());
                        param.put("pw",edtUserPw.getText().toString());

                        return param;
                    }
                };// end request

                queue.add(request);
            }// end onClick
        });// end btnLogin

        btnJoin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LoginActivity.this,JoinActivity.class);
                startActivity(intent);
            }
        });


    }//end onCreate
}

 

JoinActivity.java 코드

더보기
package com.example.ex0419;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class JoinActivity extends AppCompatActivity {

    EditText edtRegisterId, edtRegisterNick, edtRegisterPw;
    Button btnRegister;

    RequestQueue queue;
    StringRequest request;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_join);

        edtRegisterId = findViewById(R.id.edtRegisterId);
        edtRegisterNick = findViewById(R.id.edtRegisterNick);
        edtRegisterPw = findViewById(R.id.edtRegisterPw);
        btnRegister = findViewById(R.id.btnRegister);

        queue = Volley.newRequestQueue(JoinActivity.this);

        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                int method = Request.Method.POST;
                String server_url = "http://59.0.236.34:8081/android/Join";
                
                request = new StringRequest(
                        method,
                        server_url,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                Toast.makeText(JoinActivity.this, "요청성공!", Toast.LENGTH_SHORT).show();
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                Toast.makeText(JoinActivity.this, "요청실패>> "+error.toString(), Toast.LENGTH_SHORT).show();
                            }
                        }
                ){
                    //★★★POST방식으로 데이터를 전송할 때 사용하는 메소드★★★

                    @Nullable
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        //key와 value형태로 데이터를 저장하는 자료구조 --> Map
                        Map<String, String> param = new HashMap<>();
                        param.put("id","smhrd");
                        param.put("pw","1234");
                        param.put("nick","test");

                        return param;
                    }
                };// end request

                queue.add(request);

            }// end onClick
        });// end btnRegister.SetOnclick
    }//end onCreate
}

 

728x90
Comments