DI (Dependency Injection) Spring에서 적용하기
코딩/스프링 [JAVA] 2021. 1. 7. 02:34

DI (Dependency Injection) 스프링에 들어가기 앞서, 스프링의 기본 원리인 DI에 대해 살펴보자. 보통 클래스로부터 객체 생성, 이때 이 객체(X)가 여러 객체(Y, Z)에 의존관계가 있을때 (Y, Z 객체를 사용할 때) 1) 객체 X가 필요할 때 직접 Y, Z를 생성 2) 외부에서 객체 Y, Z를 생성하고 X객체에서 사용 이때 2번처럼 외부에서 객체를 생성해 넣는 것을 주입(Injection)이라 한다. 따라서 의존성을 주입한다 해서 DI(Dependency Injection)인 것이다. 이런 DI의 장점은 다음과 같다 재사용성 증가 코드 읽기 쉬움, 단순화 더 많은 테스트 코드 종속성 감소 (엮인 관계가 적음 -> 변경시 조금만 바꾸면 됨) [활용예시 1. setter] class ..

VS Code로 Spring 시작하기
코딩/스프링 [JAVA] 2021. 1. 2. 02:24

vs code와 JDK, tomcat은 따로 설치된 상태에서 시작하도록 하자 (밑에 jdk 설치법 있습니다!) 플러그인 설치하기 EXTENSIONS에서 JAVA Extension Pack,. Spring Boot Extension Pack, Tomcat을 받아준다. Spring에서 빌드 도구를 Maven, Gradle로 선택할 수 있는데, 대부분 Maven 형태로 (이제는 다 Gradle이다) Maven은 Java용 프로젝트 관리도구로 xml 설정파일을 사용하여 사용할 수 있다. 이클립스에서는 Maven이 기본으로 내장되어 있지만, Vs Code에는 없으므로 로컬에 다운받아야 한다. (이때 Java Extension Pack에 있는 Maven은 설치된 Maven와의 연동을 위한 것이다.) Gradle은 ..

웹 크롤링하기 [Beautiful Soup]
코딩/이미지 분류 [PyTorch] 2020. 12. 22. 02:36

위키 검색에서 예상치 못한 문제점이 발생하였다. 1) 모델에서 뱉어내는 개 이름이 정확한 품종의 풀네임이 아닌 경우가 있어서, 위키에서 검색을 잘 못한다. ex) 웰시코기의 경우 풀네임이 Pembroke Welsh Corgi -> Pembroke로는 검색이 안됨. 2) 그리고 위키API에서 없는 페이지의 경우, 특정 페이지가 아닌 링크가 담긴 검색결과가 나온다. 따라서 우선 특정 사이트에서 크롤링하는 방법을 사용하기로 했다. 기존 사이트의 URL을 통해 크롤링을 하려고 하면, 추가 라이브러리를 사용하면 된다. 우선 타겟으로 한 사이트는 다음과 같다. 미국 애견 협회로 세계에서 2번째로 오래되었다고 한다. 그리고 1번의 문제를 해결하기 위해, 위 사이트에서 검색한 결과에서 제일 상단에 위치한 저 Breed..

API 사용해서 결과창 나타내기 [위키 API, 구글 번역 API]
코딩/이미지 분류 [PyTorch] 2020. 12. 21. 02:12

이전 게시글에서 Flask를 통해 구축한 서버에서, RestAPI를 사용해 DenseNet121모델을 통해 사진을 분류하고 그 결과를 보여주도록 했다. 프로젝트를 위 구조를 이용해서, 개의 사진을 올리면 품종을 알려주고 그에 대한 정보를 주도록 진행하고자 하였다. 일단 개에 대해서 추가학습을 시키는 모델은 팀원에게 맡기고... 나는 결과페이지의 구성을 알차게 하려고 한다. 위키 API 사용하기 우선 분류한 클래스의 결과를 위키피디아에 검색하려고 한다. 찾아보니 위키피디아 API가 존재하였다. 우선 위키피디아 api를 다운받는다. pip install wikipedia -api 내가 숙지한 사용법은 다음과 같다. 위키피디아의 언어를 설정하고, 내가 원하는 페이지를 찾아 데이터를 얻어오는 방식으로 사용하였다..

VSCODE에서 아나콘다 연동하기 + 'conda' 용어가 ... 오류
코딩/꿀팁 2020. 12. 18. 21:20

VSCODE에서 아나콘다 연동하기 Vscode 실행 -> Extensions 클릭 -> 파이썬 클릭 (없으면 파이썬 설치) ctrl + shift + p 로 Command Palette 열기 Python : Select Interpreter 검색 -> 원하는 환경 선택하기 이때 이런 오류 발생 conda : 'conda' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 왜냐면 터미널이 powershell로 되어있기 때문!!!!!! ctrl + shift + p 로 Command Palette 열기 Terminal: Select Default Shell 입력 후..

Flask를 이용하여 파이토치를 REST API로 베포하기2
코딩/이미지 분류 [PyTorch] 2020. 11. 13. 02:15

본 게시글은 PyTorch 공식 홈페이지의 "FLASK로 REST API를 통해 PYTHON에서 PYTORCH 베포"를 진행하면서 작성한 글입니다! 이전 게시글에서는 Flask 서버를 구동하면서 파이썬 코드를 통해 실험해보았었다. import requests resp = requests.post("http://localhost:5000/predict", files={"file": open('_static/cat.jpg','rb')}) resp.json() HTML 렌더링 이번에는 HTML 문서와 연결시켜서 해보겠다. 방법은 간단하다 랜더링이라 하는데 우선 미리 html 문서를 만들어 놓는다. 여기서 주목해야 될 부분은 form 부분이다. 이전에 API에서 POST 형식으로 'file'명칭을 기존 주소 +..

Flask를 이용하여 파이토치를 REST API로 베포하기
코딩/이미지 분류 [PyTorch] 2020. 11. 2. 15:32

본 게시글은 PyTorch 공식 홈페이지의 "FLASK로 REST API를 통해 PYTHON에서 PYTORCH 베포"를 진행하면서 작성한 글입니다! 이미지 분류 모델 구축 미리 학습된 DenseNet 모델을 통하여, 주어진 이미지 파일이 뭔지 분류하려고 한다. DenseNet 모델은 224x224의 RGB 이미지를 분류하기 때문에, 우선 데이터셋을 정규화해야 한다. import io import torchvision.transforms as transforms from PIL import Image def transform_image(image_bytes): my_transforms = transforms.Compose([transforms.Resize(255), transforms.CenterCrop(..

REST API란? [특징, 규칙]
코딩/이미지 분류 [PyTorch] 2020. 11. 2. 13:09

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. (위키백과) REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 제일 큰 의미로는 웹 사이트의 모든 자원 (이미지, 텍스트, DB 등)에 고유한 id (URI)를 부여해 처리하는 것이다. 자원을 이름(표현)으로 구분해서 상태(정보)를 주고 받는데, 자원에 대해 CRUD(Create, Read, Update, Delete)연산을 수행하기 위해 URI로 요청을 보내고 ..

머신러닝 : CIFAR-10 성능향상 [Conv, Linear, Dropout]
코딩/이미지 분류 [PyTorch] 2020. 10. 7. 14:40

파이토치로 지난번에 만든 사진 분류모델의 성능 향상을 해보려고 한다. Epoch 늘려보기 우선 가장 쉽게 생각한 방법은 Epoch, 즉 사이클 횟수를 높히는 방법이다. 반복횟수를 20번으로 높혀서 실행하고 정확도를 확인해보았다. 구글 Colab에서 CUDA환경을 사용하였기 때문에, Batch-size를 16으로 늘리고 진행하였다. import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(20): running_loss = 0.0 for i, data in enumerate(trainloader, 0): i..

머신러닝 : CNN (합성곱신경망) [Convolution, Pooling]
코딩/이미지 분류 [PyTorch] 2020. 10. 6. 02:04

CNN 즉 합성곱신경망은 고수준의 뉴런이 저수준의 뉴런의 출력에 기반한다는 아이디어에서 나온 개념이다. 기존의 완전연결 층에서는 3차원 데이터를 입력 층에 넣어주기위해 1차원 데이터로 변환했다. 이렇게 1차원으로 변환한 데이터는 공간적인 정보가 사라진 상태라 이미지같은 경우 구조가 깨져버려 정보가 많이 사라져버린다. 따라서 구조 정보를 보존하면서 학습하는 방법으로 등장한게 합성곱 신경망 (CNN)이다. LeCun에 의해 처음 개념이 개발되었고, LeNet이 그 첫번째 구조이다 CNN은 층을 크게 합성곱층(Convolutional Layer)과 풀링층(Pooling Layer)으로 반복하여 구성한다 Convolutional Layers(합성곱층) 합성곱은 3차원 데이터를 필터를 통해 여러 특성을 띄는 채널..