Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
비전공자의 IoT 국비 교육 수강일지 Day_87 본문
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)
# 모델 예측
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
'비전공자의 코딩일지' 카테고리의 다른 글
비전공자의 IoT 국비 교육 수강일지 Day_89 (0) | 2022.04.25 |
---|---|
비전공자의 IoT 국비 교육 수강일지 Day_88 (0) | 2022.04.22 |
비전공자의 IoT 국비 교육 수강일지 Day_86 (2) | 2022.04.20 |
비전공자의 IoT 국비 교육 수강일지 Day_85 (0) | 2022.04.19 |
비전공자의 IoT 국비 교육 수강일지 Day_84 (0) | 2022.04.18 |
Comments