개요

  • 이 글은 Git Bash와 VScode를 이용한 폴더 생성 및 가상 환경을 설정 하여 구동(activate)하는 과정을 설명한 글 입니다.

(1) Git bash

  • git bash 프로그램을 실행하여 설정 할 경로를 잡아준다.

    • 참고: 아래는 git bash 프로그램의 간단한 명령어 이다

      1
      2
      3
      cd ..             # 상위 폴더인 이전 경로로 이동
      cd '{폴더이름}' # 하위 폴더의 폴더이름으로 경로 이동
      ls # 현재 경로의 하위 폴더 및 파일을 나타내줌
    • 필자는 c드라이브로 폴더를 생성하겠다.

    png


  • 해당 경로에 폴더를 생성한 뒤 경로를 이동한다.

    1
    2
    mkdir "{폴더이름}" # 폴더 생성
    cd "{폴더이름}" # 경로 이동

    png


  • code . 을 입력하여 VScode 프로그램을 실행 및 파일을 불러온다.

    png

    png


(2) VScode

  • 연결된 Vscode 프로그램에서 터미널(Terminal)창을 켠 뒤 bash로 설정

    png


  • virtualenv venv 로 가상 환경 폴더 생성

    • venv라는 폴더가 생성 되면 정상적으로 실행 된 것이다.
    • bash: virtualenv: command not found : virtualenv virtualenv 모듈 설치가 안되어 있어서 생기는 오류 , pip install virtualenv 로 설치 한 뒤 , virtualenv venv 한번 더 실행.

    png


  • source venv/Scripts/activate 로 가상 환경 설정, 정상적으로 실행이 되면 경로 맨앞에 (venv)라는 문구가 나타난다.

    png

    • Tip: source v를 입력후 Tap키를 눌렀을때 venv가 나오면 정상적으로 실행가능.


  • 로컬 환경으로 다시 전환 하려면 deactivate 를 입력하면 가능하다.

    png

Comment and share

  • 이 글은 Github blog를 관리 및 운영하는데 필자가 겪은 에러, 어려움 등을 해결하는 과정을 기록할 목적으로 만들어졌습니다.

개요

  • git push를 하는 과정에서 발생한 error fatal: The current branch main has no upstream branch. 를 해결하는 과정을 설명

error fatal: The current branch main has no upstream branch.

  • git push를 하는 과정에서 다음과 같이 오류가 생김

    png

    • 이 에러는 원격 저장소 이름을 언급하지 않아서 생긴다.
  • git remote -v 로 원격 저장소 이름을 찾은 뒤 원격 저장소를 git push origin main 로 명시해주면 된다.

Comment and share

  • 이 글은 Github blog를 관리 및 운영하는데 필자가 겪은 에러, 어려움 등을 해결하는 과정을 기록할 목적으로 만들어졌습니다.

개요

  • Ubuntu 프로그램 WSL2 Linux 환경에서 발생한 에러인 E212: Can’t open file for writing 를 해결하기 위한 과정을 작성한 것 입니다.(필자는 경로 설정을 잘못하여 에러가 발생한 것이지만 경로 설정이 맞는 일반적인 상황에서의 해결도 작성되어 있습니다.)

  • 22/4/13 강사님의 블로그를 통해 WSL2 설정을 마친 후 Linux 환경에 대한 명령어에 익숙해지기 위해 temp.sh 파일을 생성하여 적응하는 도중 작성한 기록을 저장하는 도중 E212: Can’t open file for writing 에러가 발생하였다. 이 에러는 권한 문제로 나온 것 같다.

    png


  • 이럴때는  sudo vi 만드려는 파일명 으로 하던지 파일 생성후  저장 할때 :w !sudo tee % > /dev/null 로 해결 가능하다고 한다.
    1
    :w !sudo tee % > /dev/null

    png


  • 하지만 필자는 저장 및 파일을 닫기도 불가능하다. (:q! 로 나갈수는 있었으나 저장이 불가능, root 계정을 확인했는데.. 왜 불가능할까)

  • 확인해보니 경로가 잘못되어 있었다.. (혹시나 boot 같은 다른 파일을 잘못 건들면 삭제하고 다시 설치 하며 환경 설정을 재 설정 해야되는 불상사가 일어날 수 있으니 조심)

    png


  • cd .. 으로 기본 값으로 돌아와서 cd root 로 경로 설정을 한 뒤에 sudo vi temp.sh 로 temp.sh 파일을 생성(파일이 이미 있으면 편집으로 돌아옴) png
    1
    2
    3
    4
    cd.. # 이전 경로로 이동
    ls # 내가 위치한 경로의 파일 확인
    cd root # root 파일로 경로 이동
    sudo vi file.text # 파일 생성 및 편집 **필자는 {temp.sh} 파일을 생성 하여 편집함
    • 여기서 root 는 관리자 라는 의미로 파일을 수정 및 삭제 등 이 가능, 필자가 들은 바로는 회사에 들어가서 하나의 프로젝트를 맡아서 작업을 한다면 root 가 아닌 다른 계정을 받아 권한을 얻어야 된다고 함.

  • temp.sh 파일 생성 및 저장 후 종료가 가능해졌습니다. (:wq 는 리눅스 환경에서 저장하고 나가기)

    png

Comment and share

개요

  • 이 글은 Github blog를 관리 및 운영하는데 필자가 겪은 에러, 어려움 등을 해결하는 과정을 기록할 목적으로 만들어졌습니다.


  • 평소 Github 블로그에 대해 그 날 들은 강의들만 올리다가 강사님의 따끔하신 일침으로 제대로 된 관리를 해보자 라는 생각이 들어 실행에 옮겨보았다. Github 블로그에 글을 올리는 것은 가능했으나 글을 분류하기 위한 카테고리, 태그 등 깔끔하게 블로그 관리를 못하는 상황이라 블로그를 새롭게 개편해보기로 마음 먹었다.

테마

  • 처음 눈에 뜨인 것은 “블로그 테마” 어떻게 하면 블로그를 조금 더 깔끔하게 보일수 있으면 어떨까란 생각에 다른 사용자의 글을 보며 결국 테마를 “tranquilpeak“ 으로 변경하기로 했다.

    GitHub - kakawait/hugo-tranquilpeak-theme: A gorgeous responsive theme for Hugo blog framework

  • 위 링크를 참고하며 tranquilpeak 테마를 변경하는 중 수많은 에러들이 발생하였고 해결하며 테마 변경을 하였다. (해결 당시 글을 쓰고 있지 않아 뒤죽박죽 섞여서 과정 설명은 참고 사이트로 대체 합니다.)

    1
    Remote origin already exists
    • Remote origin already exists : 기존에 연결되어 있는 레파지토리가 다시 새로운 레파지토리에 소스코드를 올리려고 하면 발생되는 에러.
    1
    Fatal : refusing to merge unrelated histories
    • Fatal : refusing to merge unrelated histories : 이 오류는 명령어 git push 또는 git pull을 진행할때 발견할 수 있는 오류, 로컬 저장소와 원격지의 저장소 기록을 비교했을 때 소스코드의 차이가 심한 저장소의 경우, 병합 오류가 날 것을 대비하여 오류 메시지를 띄우는 것 입니다.
    1
    [rejected] master → master (non-fast-forward) : gitignore

환경 설정

  • 테마 변경 후 블로그 환경 설정을 위해 사이드바 메뉴 설정 및 RSS feed 등 변경
    • 테마 이미지 및 프로필 이미지, favicon 수정 및 categories, tags, archives 설정 후 확인

      png

      • email 설정은 url이 mailto라고 되어 있을텐데 mailto:사용자아이디@메일 로 변경
      1
      2
      3
      4
      5
      # {project_name}/themes/tranquilpeak/_config.yml
      mail:
      title: global.mail
      url: mailto:dksenghd123@naver.com
      icon: fa fa-envelope
    • 테마, 프로필 이미지 및 favicon 수정은 잘되었으나 categories, tags, archives 등 아래 사진과 같이 되어 확인.

      png

      • 확인 해보니 잘못된 저장 경로({project_name}/themes/tranquilpeak/source/all-categories)에 위치하여 {project_name}/source/all-categories 로 변경 후 확인, 정상 작동
      1
      2
      3
      # {project_name}/themes/tranquilpeak/source/all-categories
      # ↓↓↓↓↓↓↓↓↓↓ 저장된 위치 변경
      # {project_name}/source/all-categories

      png

      • 참고 사이트 https://allaboutmoon.tistory.com/232
      • categories 와 tags이 비어 있어 작성한 글에 categories 및 tags 추가 후 확인, 정상 작동
        1
        2
        3
        4
        5
        6
        7
        8
        # {project_name}/source/_post/{my_post.md}
        ---
        title: "AI_Project_SpaceShip_Titanic"
        author: "winters"
        date: '2022-04-06'
        categories: 'Project'
        tags: 'project'
        ---
        png

Comment and share

Github blog (hexo) bio(인물소개), job 설정


개요

  • 블로그 관리를 하는 도중 side bar 메뉴에서 author.bio 라고 써져 있는 것 과 프로필에 직업이 제대로 적혀 있지 않아 필자에 의도에 맞게 수정

png

  • bio 와 job 메뉴는 side bar 를 수정 할 수 있는 {project_name}/themes/tranquilpeak/_config.yml 에서 수정하는 것이 아닌 {project_name}/themes/tranquilpeak/languages/en.yml 파일에서 수정이 가능하다. (필자의 언어 설정은 “en”이므로 “ko”를 설정한 경우 같은 경로의 ko.yml 파일을 수정하면 됨)
    • 아래 사진은 ko.yml 파일의 코드를 나열 한 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# {project_name}/themes/tranquilpeak/languages/ko.yml
# 블로그의 모든 곳에 표시되는 날짜 형식
date_format: "YYYY/MM/DD"

global:
home: "Home"
categories: "카테고리"
category: "카테고리"
tags: "태그"
tag: "태그"
archives: "아카이브"
search: "검색"
about: "About"
author_picture: "저자 이미지"
github: "GitHub"
stack_overflow: "Stack Overflow"
twitter: "Twitter"
facebook: "Facebook"
google_plus: "Google +"
weibo: "Weibo"
qq: "QQ"
qzone: "Qzone"
renren: "Renren"
vk: "VK"
odnoklassniki: "Odnoklassniki"
linkedin: "LinkedIn"
mail: "Mail"
rss: "RSS"
share_on_facebook: "Facebook에 공유하기"
share_on_twitter: "Twitter에 공유하기"
share_on_google_plus: "Google+에 공유하기"
share_on_weibo: "Weibo에 공유하기"
share_on_qq: "QQ에 공유하기"
share_on_qzone: "Qzone에 공유하기"
share_on_renren: "Renren에 공유하기"
share_on_vk: "VK에 공유하기"
share_on_odnoklassniki: "Odnoklassniki에 공유하기"
search_category: "카테고리 검색"
search_tag: "태그 검색"
search_date: "날짜 검색 (YYYY/MM/DD)"
posts_found:
zero: "포스트가 없습니다."
one: "1 개의 포스트가 있습니다."
other: "{n} 개의 포스트가 있습니다."
categories_found:
zero: "카테고리가 없습니다."
one: "1 개의 카테고리가 있습니다."
other: "{n} 개의 카테고리가 있습니다."
tags_found:
zero: "태그가 없습니다."
one: "1 개의 태그가 있습니다."
other: "{n} 개의 태그가 있습니다."
read_more_about_author: "저자에 대해 더 알아보기"
zoom_in_on_picture: "사진 확대"
go_to_homepage: "홈페이지로 이동하기"
open_link: "링크 열기"
open_post: "소식 열기"

pagination:
page: "page %d"
of: "of %d"
newer_posts: "최근 포스트"
older_posts: "이전 포스트"
previous: "이전"
next: "다음"

post:
no_title : "제목 없음"
categorized_in: "카테고리"
tagged_in: "태그"
toc: "목차"
back_to_top: "맨 위로"
read_more: "계속 읽기"
go_to_website: "웹 사이트로 이동"
comment_and_share: "댓글 공유"
comment: "댓글을 남겨주세요"
share: "이 포스트 공유하기"
gallery: "갤러리"
image:
one: "이미지"
other: "%d 이미지"

author:
# Your biography (마크다운과 HTML이 지원됩니다.)
bio: ""
# Your job
job: ""
  • 맨 아래에 위치한 author 부분이 bio 와 job 즉, 필자가 변경을 원하던 메뉴 이므로 수정 bio(인물소개), job(직업) 안에 원하는 문구 및 파일(bio)을 수정한다.

png

Comment and share

  • 이 글은 Github blog를 관리 및 운영하는데 필자가 겪은 에러, 어려움 등을 해결하는 과정을 기록할 목적으로 만들어졌습니다.

개요

  • 깃허브 블로그 계정 연동 오류 fatal: Authentication failed for ~ 를 github tokken 을 생성함으로 해결 하는 방법입니다.

  • 깃허브(Github) 블로그 테마를 변경하면서 무엇을 잘못 건들였는지 git add, commit, push 도 가능하고 블로그에 글도 업데이트 되는데 깃허브 메인 화면의 30 contributions in the last year 및 내 활동기록이 기록이 되지않는다.
    • git add, commit, push 정상 작동

      png


    • Github 메인화면 내 활동 기록이 기록되지 않는 현상 발견

      png


  • 처음에는 커밋(commit)이라는 단어를 내가 잘못 이해하고 있나 라고 의심을 해서 커밋에 대한 구글링을 했지만 내가 알고 있는 커밋이라는 용어가 틀리지 않았고 어떻게 해야될지 감이 안잡혀 evan 강사님(https://dschloe.github.io/)에게 여쭤보았고 방법을 알려주셨다.
    • windows 검색 화면에서 웹 자격 증명을 클릭

      png


    • windows 자격 증명

      png


    • 일반 자격 증명에서 github 목록을 클릭하여 편집을 눌러 계정을 다시 업데이트 한다

      png


  • 그 후에 Pycharm(필자는 Pycharm을 통해 프로젝트를 관리 하는중)에 돌아와 다시 git add, commit, push 를 하면 fatal: Authentication failed for ~ 라는 문구가 뜬다. 이 문구는 local 계정과 github 계정의 연동이 틀려서 나오는 것이고 ID/Password 는 21년 8월 이후로 토큰으로 대체 되었다 라는 의미입니다. 즉 계정 연동을 다시 해줘야 한다는 뜻이므로 토큰을 생성 및 연동하러 Github 페이지로 접속하겠습니다.

    png

Tokken

  • https://wotres.tistory.com/m/entry/Github-에러-해결법-Authentication-failed-for-use-a-personal-access-token-instead 고수트님의 블로그 내용을 참고하여 계정 연동을 시작
    • 좌측 메뉴 끝에 developer settings 클릭

      png


    • Personal access tokens 클릭

      png


    • Note, expiration에 작성하고 싶은 내용, 기간 설정 후 repo 클릭 후 Generate tokken 클릭

      png


    • 생성된 토큰 코드 복사

      png


    • git push
      • git push를 입력하면 ID / Password 입력하라고 하는데 사용자의 깃허브 아이디와 복사한 토큰을 패스워드에 넣어주면 된다.(패스워드는 입력을 해도 보이지 않게 되어 필자는 ctrl+v로 붙여 넣었다. ***terminal 창에서 ctrl+v 로 붙여넣기가 되지않으면 insert 키로 붙여넣으면 됨.)

        png


      • git push 를 할 때 마다 위의 사진 처럼 Username 과 Password(tokken)을 입력하라고 나오기 때문에 Tokken 은 복사하여 메모장이나 기록할 파일에 저장하길 바랍니다.

Comment and share

  • 이 글은 Github blog를 관리 및 운영하는데 필자가 겪은 에러, 어려움 등을 해결하는 과정을 기록할 목적으로 만들어졌습니다.

개요

  • 깃허브 블로그 계정 연동 오류 fatal: Authentication failed for ~ 를 github tokken 이 아닌 —global로 해결하는 방법을 나타냄 (21년 8월 이후 변경된 토큰으로 인해 토큰을 이용 하지 않으면 불가능한 방법입니다, 아래 링크 글로 이동한 뒤 참고하여 해결하세요.)

  • 깃허브(Github) 블로그 테마를 변경하면서 무엇을 잘못 건들였는지 git add, commit, push 도 가능하고 블로그에 글도 업데이트 되는데 깃허브 메인 화면의 30 contributions in the last year 및 내 활동기록이 기록이 되지않는다.

    • git add, commit, push 정상 작동

      png


    • Github 메인화면 내 활동 기록이 기록되지 않는 현상 발견

      png


  • 처음에는 커밋(commit)이라는 단어를 내가 잘못 이해하고 있나 라고 의심을 해서 커밋에 대한 구글링을 했지만 내가 알고 있는 커밋이라는 용어가 틀리지 않았고 어떻게 해야될지 감이 안잡혀 evan 강사님(https://dschloe.github.io/)에게 여쭤보았고 방법을 알려주셨다.

    • windows 검색 화면에서 웹 자격 증명을 클릭

      png


    • windows 자격 증명

      png


    • 일반 자격 증명에서 github 목록을 클릭하여 편집을 눌러 계정을 다시 업데이트 한다

      png


    • 그 후에 Pycharm(필자는 Pycharm을 통해 프로젝트를 관리 하는중)에 돌아와 다시 git add, commit, push 를 하면 fatal: Authentication failed for ~ 라는 문구가 뜬다. 이 문구는 local 계정과 github 계정의 연동이 틀려서 나오는 것이고 ID/Password 는 21년 8월 이후로 토큰으로 대체 되었다 라는 의미입니다. 즉 계정 연동을 다시 해줘야 한다는 뜻이므로 이번엔 tokken이 아닌 git config —global 방식으로 해결하겠습니다.

git config —global

  • https://imitursa.tistory.com/3213 이 블로그를 참고하며 해결 방법을 작성 하겠습니다.
    • 관리자 권한으로 명령창을 연다.

      png


    • ‘git config —system —unset credential.helper’ 명령어를 입력한다.(오타 주의)

      png


    • ‘git config —global —unset credential.helper’ 명령어를 입력한다.

      png


    • 다시 작업 했던 Project(필자는 Pycharm을 사용)로 돌아와 git add, commit, push 를 해주면 계정을 입력하라는 내용이 나온다.

      png


    • 21년 8월 이후로 토큰 방식으로 연동 방법이 변경되어 토큰을 갖고 로그인을 하라고 나옵니다.

Comment and share

  • 이 글은 Github blog를 관리 및 운영하는데 필자가 겪은 에러, 어려움 등을 해결하는 과정을 기록할 목적으로 만들어졌습니다.

개요

  • 지난 Github_blog (hexo) 연동 오류 -global, -tokken 이 두개의 글을 쓰며 드디어 된줄 알았던 깃허브 블로그 Contribution 연동 오류가 기록이 되지 않아 계정 및 설정을 확인 함으로 해결하는 방법을 나타냄.

Contribution 그래프가 채워지는 조건

  1. 커밋할 때 사용한 이메일 주소가 ghithub계정의 이메일 주소와 같아야 한다.
  2. fork를 한 commit은 적용되지 않고 독립적인 repository에서 이루어진 commit이여야 한다.
  3. 커밋은 다음으로 만들어 져야한다.(필자의 경우 main을 branch로 한다)
    1. repository의 default branch(보통 master)
    2. gh-pages branch(github page branch)

  1. git command 사용으로 등록된 이메일 주소 확인
  • 확인 해 보니 계정이 달라서 변경함.
    1
    2
    -> git config user.email
    -> git config --global user.email mymail@site.com
    png

  • 드디어 연동이 가능합니다..

png

  • 혹시나 Git Command로 확인 해도 안되셨다면 위 참고 블로그에서 소스트리(source tree)로 변경해보시길 바랍니다.

Comment and share

프로젝트 개요

  • 강의명 : 2022년 K-디지털 직업훈련(Training) 사업 - AI데이터플랫폼을 활용한 빅데이터 분석전문가 과정
  • 교과목명 : 빅데이터 분석 및 시각화, AI개발 기초, 인공지능 프로그래밍
  • 프로젝트 주제 : Spaceship Titanic 데이터를 활용한 탑승유무 분류모형 개발
  • 프로젝트 마감일 : 2022년 4월 12일 화요일
  • 강사명 : Evan
  • 수강생명 : 안두홍
  • 프로젝트 링크 : https://www.kaggle.com/code/wintersadh/spaceshiptitanic-test-02

Comment and share

비지도 학습

  • vs 지도학습
    • 종속변수 = 타깃
  • 비지도학습은 종속변수 및 타겟이 없음
  • 분류
    • 다중분류
    • 전체조건이 (다양한 유형) 데이터가 많아야함
    • 딥러닝과 연관 (자연어처리, 이미지)

데이터 불러오기

1
!wget https://bit.ly/fruits_300_data -O fruits_300.npy
--2022-03-31 01:37:42--  https://bit.ly/fruits_300_data
Resolving bit.ly (bit.ly)... 67.199.248.10, 67.199.248.11
Connecting to bit.ly (bit.ly)|67.199.248.10|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://github.com/rickiepark/hg-mldl/raw/master/fruits_300.npy [following]
--2022-03-31 01:37:42--  https://github.com/rickiepark/hg-mldl/raw/master/fruits_300.npy
Resolving github.com (github.com)... 140.82.114.3
Connecting to github.com (github.com)|140.82.114.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/rickiepark/hg-mldl/master/fruits_300.npy [following]
--2022-03-31 01:37:42--  https://raw.githubusercontent.com/rickiepark/hg-mldl/master/fruits_300.npy
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3000128 (2.9M) [application/octet-stream]
Saving to: ‘fruits_300.npy’

fruits_300.npy      100%[===================>]   2.86M  --.-KB/s    in 0.07s   

2022-03-31 01:37:43 (41.4 MB/s) - ‘fruits_300.npy’ saved [3000128/3000128]
1
2
3
4
5
6
import numpy as np
import matplotlib.pyplot as plt

fruits = np.load('/content/fruits_300.npy')
print(fruits.shape)
print(fruits.ndim)
(300, 100, 100)
3
  • 첫번째 차원(300) = 샘플의 개수
  • 두번째 차원(100) = 이미지 높이
  • 세번째 차원(100) = 이미지 너비
  • 이미지 크기 100 x 100
1
fruits[0, :, 0]
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 6, 1, 2, 3, 1, 2, 3,
       1, 1, 1, 2, 2, 2, 5, 2, 2, 5, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
       1, 2, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=uint8)
  • 이미지 시각화
    • 흑백 사진을 담고 있다.
    • 0 ~ 255까지의 정숫값을 가진다
1
2
plt.imshow(fruits[0], cmap = 'gray')
plt.show()

png

1
2
plt.imshow(fruits[0], cmap = 'gray_r')
plt.show()

png

  • 여러 이미지 시각화
1
2
3
4
5
fig, axs = plt.subplots(1, 2)
axs[0].imshow(fruits[100], cmap = 'gray_r')
axs[1].imshow(fruits[200], cmap = 'gray_r')

plt.show()

png

픽셀값 분석

  • 배열을 계산할 때 1차원 배열로 펼쳐서 계산하면 편리하기 때문에 100 x 100 이미지를 펼쳐서 10,000인 1차원 배열로 만든다.
1
2
3
4
5
6
7
apple = fruits[0:100].reshape(-1, 100 * 100)
pineapple = fruits[100:200].reshape(-1, 100 * 100)
banana = fruits[200:300].reshape(-1, 100*100)

print(apple.shape)
print(pineapple.shape)
print(banana.shape)
(100, 10000)
(100, 10000)
(100, 10000)
  • 100 x 100 이미지를 펼친 10,000인 1차원 배열로 만들었으니 열을 사용해 샘플의 픽셀 평균값을 계산
  • axis = 0 vs axis = 1 차이 확인(p.293)
1
2
# axis = 1 열
print(apple.mean(axis = 1))
[ 88.3346  97.9249  87.3709  98.3703  92.8705  82.6439  94.4244  95.5999
  90.681   81.6226  87.0578  95.0745  93.8416  87.017   97.5078  87.2019
  88.9827 100.9158  92.7823 100.9184 104.9854  88.674   99.5643  97.2495
  94.1179  92.1935  95.1671  93.3322 102.8967  94.6695  90.5285  89.0744
  97.7641  97.2938 100.7564  90.5236 100.2542  85.8452  96.4615  97.1492
  90.711  102.3193  87.1629  89.8751  86.7327  86.3991  95.2865  89.1709
  96.8163  91.6604  96.1065  99.6829  94.9718  87.4812  89.2596  89.5268
  93.799   97.3983  87.151   97.825  103.22    94.4239  83.6657  83.5159
 102.8453  87.0379  91.2742 100.4848  93.8388  90.8568  97.4616  97.5022
  82.446   87.1789  96.9206  90.3135  90.565   97.6538  98.0919  93.6252
  87.3867  84.7073  89.1135  86.7646  88.7301  86.643   96.7323  97.2604
  81.9424  87.1687  97.2066  83.4712  95.9781  91.8096  98.4086 100.7823
 101.556  100.7027  91.6098  88.8976]
  • 각 과일에 대한 히스토그램 작성
1
2
3
4
5
plt.hist(np.mean(apple, axis = 1), alpha = 0.8) # alpha 는 그래프의 색상 농도
plt.hist(np.mean(pineapple, axis = 1), alpha = 0.8)
plt.hist(np.mean(banana, axis = 1), alpha = 0.8)
plt.legend(['apple', 'pineapple', 'banana']) # legend() 과일 분류 상자
plt.show()

png

1
2
3
4
5
fig, axs = plt.subplots(1, 3, figsize=(20, 5))
axs[0].bar(range(10000), np.mean(apple, axis = 0))
axs[1].bar(range(10000), np.mean(pineapple, axis = 0))
axs[2].bar(range(10000), np.mean(banana, axis = 0))
plt.show()

png

1
2
3
4
5
6
7
8
apple_mean = np.mean(apple, axis = 0).reshape(100, 100)
pineapple_mean = np.mean(pineapple, axis = 0).reshape(100, 100)
banana_mean = np.mean(banana, axis = 0).reshape(100, 100)
fig, axs = plt.subplots(1, 3, figsize=(20,5))
axs[0].imshow(apple_mean, cmap = 'gray_r')
axs[1].imshow(pineapple_mean, cmap = 'gray_r')
axs[2].imshow(banana_mean, cmap = 'gray_r')
plt.show()

png

평균값과 가까운 사진 고르기

1
2
3
abs_diff = np.abs(fruits - apple_mean)
abs_mean = np.mean(abs_diff, axis =(1,2))
print(abs_mean.shape)
(300,)
1
2
3
4
5
6
7
apple_index = np.argsort(abs_mean)[:100]
fig, axs = plt.subplots(10, 10, figsize = (10, 10))
for i in range(10):
for j in range(10):
axs[i, j].imshow(fruits[apple_index[i*10 + j]], cmap = 'gray_r')
axs[i, j].axis('off')
plt.show()

png

Comment and share

Author's picture

Winters

개발자를 꿈꾸는 어른이


개발자(예비)


대한민국/서울