【Docker】 windows 10 home 그리고 docker desktop

내가 하다 하다.. 윈도우에서 아나콘다로 버티려고 했는데,

역시 우분투가 계속 필요하다는게 느껴져서, 다음의 사이트를 이용해 도커를 설치하였다.

[https://blog.sapzil.org/2019/06/09/docker-desktop-for-windows-home/]

아직은 도커를 이용해서 우분투를 이용하고, 라이브러리 이미지를 이용한다는 생각이 두렵고 무섭지만..

사용해보고, 검색해보면서 실력이 늘거라 믿고 일단 부딪혀본다!!

무섭다고 안하는 것보다는, 일단 도전하고 배워가는 게 나을 테니까!


설치순서

  1. cpu가상화 가능 체크하기

  2. 레지스트리값 변경

  3. 설치 - 최신버전설치시 오류..

  4. 해결방법 : 이전버전 설치!!!

  5. 설치 성공~~!

[https://forums.docker.com/t/docker-desktop-2-2-0-0-for-windows-installation-failed/87616/4]

설치완료!

search for Docker app Startup information ——

아쉽게도… 도커 설치하면 기본적으로 3기가 정도는 메모리를 항상 잡고 있는 것 같다.

메모리 사용량이 항상 80프로 이상이다… (노트북 메모리 : 8기가)

삭제하고 나니까 40프로 정도 되는 것 같다.

요즘 노트북이 이상하다고 생각했는데, 메모리 문제 때문인 것 같다.

그래서 결국 삭제!! ^^

【Pytorch】 Pytorch 튜토리얼 2 - pytorch로 딥러닝하기

"""
attribute = 속성. class의 맴버함수 but ()이 필요 없음

<tensor class>
1. .requires_grad : 이 attribute를 True 로 설정하면, 그 tensor에서 이뤄진 모든 연산들을 추적(track)하기 시작
2. .backward() : 호출하여 모든 변화도(gradient)를 자동으로 계산
3. .grad 속성: 이 Tensor의 변화도가 누적됨.
4. .detach() : Tensor가 기록을 추적하는 것을 중단하게 하려면
5. with torch.no_grad(): gradient는 필요없고, 메모리는 절약하고 싶고, 학습가능한 매개변수로 찾고 싶을때.

<Function class>
부호화(encode)하여 순환하지 않는 그래프(acyclic graph)를 생성
1. .grad_fn : Tensor 를 생성한 Function 을 참조

"""
pass
x = torch.ones(2, 2, requires_grad=True)
y = x + 4
print(y)  # AddBackward0 : track all operations
print(y.grad_fn) # 사용자가 마지막으로 이 변수를 만들 때 사용하는 Function을 참조한다. (기억해 놓는다.)
tensor([[5., 5.],
        [5., 5.]], grad_fn=<AddBackward0>)
<AddBackward0 object at 0x000001B1F842D2C8>
# tensor에서 * / 는 행렬의 곱이 아니라, 같은 위치 원소의 연산이다.
k = torch.tensor([[1,2],[3,4]], requires_grad=True, dtype = torch.double)
print(k*k)
tensor([[ 1.,  4.],
        [ 9., 16.]], dtype=torch.float64, grad_fn=<MulBackward0>)
print(y.requires_grad)  # 이 방법으로 y가 gradient tracking 중인지 확인 가능
print(k.requires_grad_(False))   # 이 방법으로 k의 requires_grad 속성 값 변경 가능
True
tensor([[1., 2.],
        [3., 4.]], dtype=torch.float64)
x1 = torch.ones(2, 2, requires_grad=True)
x2 = x1 + 3
x3 = 3*(x2 ** 2)
out = torch.mean(x3)  # 1/4 처리가 된다. 4개 원소 평균이므로
# ()에 아무것도 넣지 않으면, torch.tensor(1.). 이 값이 Backpropa의 가장 첫번째 upstream gradient이다.
# 그래서 out이 스칼라여야 하는 것이다. mean을 안하고 x3 = out으로 하고 backward하면, 계산 불가.
out.backward()    # d_out/d_x1 = 3*2/4 ... = 3/2(x+3)|x = 1 = [[6,6],[6,6]]
print(x1.grad)    
# x1.grad는 # d_<backward한것> / d_<.grad 한것> 의 값이 나온다. 
# 생각해보면 d_Loss/d_x1를 이용해 x1을 갱신해야하므로, x1과 똑같은 size의 tensor가 print된다


''' 위에꺼 주석하고 이것도 해보기.
x3.backward(torch.tensor([[1,1],[1,1]],dtype=torch.double))    # d_out/d_x1 = 3*2/4 ... = 3/2(x+3)|x = 1 = [[6,6],[6,6]]
print(x1.grad)    # 생각해보면 d_Loss/d_x1를 이용해 x1을 갱신해야하므로, x1과 똑같은 size의 tensor가 print된다
'''
pass
tensor([[6., 6.],
        [6., 6.]])
# 이 with 내부에 작성한 모든 연산들은 gradient tracking을 하지 않는다.
with torch.no_grad():
    print((x1 ** 2).requires_grad)
False
# .detach() 를 호출하여 내용물(content)은 같지만 require_grad가 다른 새로운 Tensor를 가져옵니다
print(x3.requires_grad)
y3 = x3.detach()
print(y3.requires_grad)
print(x3.eq(y3).all())  # https://pytorch.org/docs/stable/tensors.html#torch.BoolTensor
True
False
tensor(True)

【Algorithm】 [프머] 코딩테스트 연습/스택, 큐/기능개발

문제 : [https://programmers.co.kr/learn/courses/30/lessons/42586]

알고리즘 문제 팁 :

- 맨 위에 이야기부터 읽으면 이해가 힘들다. 문제 output해설 부분부터 읽고, 문제를 풀자.

- 손 코딩 먼저하고 문제를 풀자.

- 문제를 하나하나 꼼꼼히 읽어야 한다.


문제 풀이 및 코드

img

import math

def solution(progresses, speeds):
    answer = []
    complete_day = []

    for i in range(len(progresses)):
        temp = math.ceil((100 - progresses[i]) / speeds[i] )
        complete_day.append(temp)
        # print(complete_day)
    
    first_of_each_distri = complete_day[0]
    num = 0
    answer = []
    for i in complete_day:
        if first_of_each_distri < i:
            answer.append(num)
            num = 1
            first_of_each_distri = i
        else :
            num += 1
    
    answer.append(num)
    print(answer)
    
    
    return answer

손코딩 너무 중요하다!!

【위성Segment】 [위성사진, SAR] 데이터 찾기 - MSTAR, Codalab

원본 글 위치 : https://junha1125.tistory.com/53?category=836123

**

1. Git : MSTAR-tensorflow (star : 28)

Git 사이트에 의하면, [https://github.com/hamza-latif/MSTAR_tensorflow] 다음과 같은 Instruction이 있었다.

We want to train a deep neural network to identify targets in the three class MSTAR dataset obtained from \1. [https://www.sdms.afrl.af.mil/index.php?collection=mstar&page=targets] and possibly the ten class dataset from \2. [https://www.sdms.afrl.af.mil/index.php?collection=mstar&page=mixed]

이 사이트를 참고하여, Mstar에서 재공하는 public data를 찾아보았다.

Original Website -> [https://www.sdms.afrl.af.mil/index.php] 이 사이트에 회원가입하고(국민대 계정 메일 확인) Download링크를 찾아가면, 그림2의 사이트로 들어갔다. (위 인용구 2개의 사이트 둘 다 그림2로 갔다.)

img

img그림2

그리고 targets와 mixed와 가장 관련이 깊은 다음의 파일을 다운받아 보았다.

img

1-1 ReadMe 정리

- Abstract

SAR (Synthetic Aperture Radar) 객체 인식은 군사 응용 분야에서 자동 표적 인식 및 공중 정찰에 중요한 문제입니다. SAR 이미지에서 유용한 Feature를 extract하고, classification하기 위해 deep CNN을 사용할 것이다. 데이터 셋은 공개적으로 사용 가능한 MSTAR(Moving and Stationary Target Acquisition and Recognition)을 사용할 것이다.

- Introduction (DataSet)

three class MSTAR dataset : [targets]

ten class MSTAR dataset : [mixed]

Paper : Deep convolutional neural networks for ATR from SAR imagery [Morgan 2015] [링크]

ten class 문제에 대해서 92.3%의 분류 정확도를 기록했다.

- Background

SAR (Synthetic Aperture Radar)은 거리에 걸쳐 안테나의 움직임을 사용하여 큰 “합성”안테나 조리개를 만들어 표준 레이더보다 훨씬 더 정밀한 해상도 이미지를 제공하는 레이더의 한 형태입니다. [기본 원리]

img

MSTAR 데이터 세트는 1995-1997 년에 수집 된 SAR 이미지 모음이다.

이미지는 SAR 이미지는 128 x 128 픽셀이며, float 형태의 객체 크기(magnitude) 및 위상(phase) 데이터를 포함합니다. 우리의 목적을 위해 크기(magnitude) 데이터 만 고려한다.

- Network 구조

가장 Base구조로 ResNet을 사용한다. 총 32개의 layer로 되어 있으며, Shape 변화는 이와 같다.

input size = 1(?)128128 -> 643232 ->(average pooling) 64 ->(FC) -> 10

2. *Git :* mstar-bin-tool (star : 99)

3. *Git :* yi-hack-MStar (star : 150)

-> (예상) 2개의 Git은 MSTAR 데이터를 해석하고 읽어주는 tool에 대한 firmware를 다루는 코드인 듯 하다.

우리가 원하는, 데이터 셋을 찾고 전처리하고 그리고 예측 신경망을 만들어 classification을 하는 것은 없는 듯 하다.

PS.

MSTAR dataset 다루는 방법에 관한 글 (나중에 더 찾아볼 것) : [링크]

위 글의 답변에 따르면 이 MSTAR에서 제공하는 툴을 이용하면 된다고 한다.

우선 툴이 있다는 정도만 알아두기…

<위성 데이터, SAR 데이터, 유용한 것 찾아보기>

[CodaLab]

과거에 신청해놓았던, 대회들을 통해서, 코드와 dataset을 찾아보았다.

img

<1. DeepGlobe Land Cover Classification Challenge>

- the challenge of automatic classification of land cover types.

- a multi-class segmentation task to detect areas

- of urban, agriculture, rangeland, forest, water, barren, and unknown.

Participate -> Get Data에서 데이터들 설명 -> Files에서 파일을 다운받을 수 있다.

img

【Pytorch】 Pytorch 튜토리얼 1 - pytorch로 딥러닝하기

(Pytorch) Pytorch 튜토리얼 1 - pytorch로 딥러닝하기

# torch 사용법 백과사전 : https://pytorch.org/docs/stable/
import torch
torch.__version__

‘1.4.0’

# print function에 대하여, 2.x 3.x 버전 둘다 사용가능하게 해줌. print x,y; print(x,y)
from __future__ import print_function 
# 메모리 할당만 해주고, 값은 정의 하지 않는다. 쓰레기 값 저장되어 있을 것.
x = torch.empty(5,3)
print(x)
# 배열을 생성하고 싶을 때. 아래의 값들은 모두 tensor([[],[]])로 저장되어 있다. 
y = torch.rand(2,3)
z = torch.zeros(2,3)
k = torch.ones(2,3,dtype=torch.double)          # torch.double == torch.float64
j = torch.rand_like(k,dtype=torch.float)        # k와 동일한(like) 크기를 가지는 rand tensor를 만든다
# object.size() == object.shape. torch.size는 사실 튜플이다. 모든 곳에서 튜플처럼 이용할 수 있다. 
print(j.shape, ' ==? ',j.size())
n = torch.rand(j.shape) 
m = torch.rand(j.size())
print(type(j.size()))
# list를 가지고 있다면 직접 tensor생성
i = torch.tensor([1,2,3,4])
tensor([[9.2755e-39, 1.0561e-38, 1.0561e-38],
        [4.4082e-39, 4.4082e-39, 5.9694e-39],
        [8.9082e-39, 1.0194e-38, 9.1837e-39],
        [4.6837e-39, 9.2755e-39, 1.0837e-38],
        [8.4490e-39, 1.0194e-38, 9.0919e-39]])
torch.Size([2, 3])  ==?  torch.Size([2, 3])
<class 'torch.Size'>
# operator 같은 size 텐서에서 + - 연산 가능
q = y+z 
q = torch.add(y,z)
q = torch.empty(9,8)    #; print(q)
torch.add(y,z,out=q)    #; print(q)  # torch.add 함수는 자동으로 print해준다.
y.add(z)                # ; y += z 
tensor([[0.7769, 0.6797, 0.9659],
        [0.7994, 0.2708, 0.1580]])
# 바꿔치기 연산자. 어떤 변수를 통체로 바꿔버리고 싶다면 _ 를 사용하는 메소드를 사용하라.
k.copy_(z)              # 아무리 그래도 y와 z의 shape는 같아야 한다.
y.t_()
# 슬라이싱도 사용할 수 있다. numpy와 같은 방식이다.
print( y[:,1].type(torch.int) )
print( y[:,1].to(torch.int) )
tensor([0, 0, 0], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)
# np.reshape == torch.view
y = torch.randint(10,(2,3))  # 10을 최대 정수로. 2*3행렬 탄생
print(y)
y.resize(6)                 # view도 가능하고 reshape도 가능하고
print(y.resize(6))
y.view(3,2)
print(y.view(3,2))
y.view(-1,6)                # -1을 넣으면 알아서, 적당한 값으로 변환된다.
print(y.view(-1,6))
# 1*1 텐서의 값을 뽑아주는 item메소드
interger = torch.tensor([2]).item()  
print(interger)
print(type(interger))
tensor([[5, 0, 1],
        [3, 3, 8]])
tensor([5, 0, 1, 3, 3, 8])
tensor([[5, 0],
        [1, 3],
        [3, 8]])
tensor([[5, 0, 1, 3, 3, 8]])
2
<class 'int'>
# tensor와 numpy의 관계는 copy of referecne 관계이다.
a = torch.tensor([1,1,1,2,2])
b = a.numpy()
print(b)
a.add_(1)
print(b,"\n -----")

# numpy를 tensor로 변환
import numpy as np
a = np.ones([2,3])
b = torch.from_numpy(a)
np.add(a,1,out=a)
print(a,"\n",b)
[1 1 1 2 2]
[2 2 2 3 3] 
 -----
[[2. 2. 2.]
 [2. 2. 2.]] 
 tensor([[2., 2., 2.],
        [2., 2., 2.]], dtype=torch.float64)
# cuda 사용하기. to 메소드를 사용하면 된다.
if torch.cuda.is_available():
    device = torch.device("cuda")           #cuda사용할 수 있는 gpu id를 device라는 것
    y = torch.ones_like(x,device=device)    #변수 선언을 할 때 처음부터 device를 지정해도 되고, 
    x = x.to(device)                        #나중에 to메소드를 사용해서 device를 지정해도 된다. 
    z.to("cpu", torch.double)


【Ubutnu】 ubuntu 기본 명령어/ Vim editor 사용하기

(ubuntu) ubuntu 기본 명령어/ Vim editor 사용하기

우분투 기본 명령어

https://www.youtube.com/watch?v=6Sr3e5MEUvI

  1. history
  2. !
  3. ctrl a // ctrl e
  4. whoami
  5. adduser
  6. ps -ef
  7. ll
  8. passwd
  9. deluser
  10. su -
  11. exit
  12. pwd
  13. echo print 해준다. echo $HOME : HOME이라고 이름 지어진 환경변수의 path를 print해준다. echo $PATH : 여기에 있는 프로세스 파일은 무조건 실행 가능 echo “ttt” » : 파일내부에 이 문자열을 추가해준다. echo "tt" > <임의의 파일=""> : 원래 있던 내용 다 지우고, 지금 문자열만 추가해준다.
  14. cat : 내부 내용을 뿌려준다.(파일 내용을 본다) cat ./.bashrc
  15. touch 파일을 만들어 준다.
  16. which
  17. cd - == cd ..
  18. rmdir
  19. rm -rf
  20. cp : copy
  21. mv : mv, rename
  22. find . -name : .은 pwd아래의 모든 폴더를 뒤져본다.
  23. df dist 정보를 보여준다. df -m : 메가 바이트 단위로 알려준다.
  24. du -sm /home 해당 부위에 사용하고 있는 용량 검색. 메가 바이트 단위
  25. free -m 메모리 사용량 검색
  26. top space bar를 이용해서 갱신해 준다. 1을 누루면 cpu의 core에 관한 정보가 보여진다
  27. vmstat 좀 더 간단하게 하드웨어 사용량 vmstat 1 : 1초 단위 그려준다
  28. grep 단어 뽑아 내기 ps -ef | grep bash bash가 들어간 내용만 뽑아준다.
  29. sh tt.sh touch tt.sh echo ‘#!/bin/sh’ » tt.sh echo ‘ls’ > tt.sh sh tt.sh와 같이 sh내부의 명령어 실행 sh말고 bash라고 처도 된다.
  30. chmod 나(root) /그룹(group) /다른사람들(users) rwe : 읽기 쓰기 실행 111 111 111 -> 7 7 7 chmod 777 .sh파일은 권한이 허락된다면 $ tt.sh만으로 실행이 가능하다.
  31. chown 파일의 소유자를 바꿔준다. chown :<groupName(group이 없으면 user 이름 그대로)>
  32. ln ln -s : symbolic link 달기 : 바로가기 만들기 ln -s <목적지> <바로가기 파일이름="">
  33. export 터미널에 새로운 변수를 만들어 준다.
  34. env export했던 것등 모든 변수들을 보여준다.
  35. grep ctrl + f 같은 느낌이다. 다양한 옵션과 표현식을 넣어줌으로써 다양한 방식으로 내가 원하는 문자의 위치를 찾을 수 있다. (grep 명령어 사용법 구글검색해보기)

ubuntu variable setting

$ A="/user/home/workspace" # Shell에 새로운 변수 Define
$ A=/user/home/workspace   
$ echo ${A}
$ echo $A

Refer site1 : https://blog.gaerae.com/2015/01/bash-hello-world.html

  • Shell의 Variable이란 무엇인가?
  • 변수 지정하기
  • ‘위치 매개 변수’ $0, $1, $2, $3 …

Refer site2 : https://mug896.github.io/bash-shell/positional_parameters.html

  • set 명령어를 사용해서 ‘위치 매개 변수’ 정의하는 방법

vim 기본 사용법

1. 모드 기반의 편집기이다.

삽입모드 : 키보드로 문자열 추가

명령모드 : 키보드는 단추키일 뿐이다

라인모드 : 저장, 종료 등 Esc를 눌러서 라인모드로 들어간다.

2. 각 모드로 들어가는 방법

i를 누르면 삽입모드로

esc를 누르면 명령모드가 된다.

ecs를 마구 누르면 결국 명령모드이다.

여기서 : 를 누루면 삽입모드로 들어간다.

3. 라인모드 명령어 w : 저장하기

q : 종료하기. 닫기

wq : 저장하고 종료하기

! : 무시하고 실행하라

q! : 저장하지말고 무시하고 종료하라

%s :

set nu : line num 보여줘

set noun : line num 지워줘

paste : 전체 복사하기

4. 명령모드 명령어

u : 뒤로 되돌리기 ctrl + z

ZZ : 저장하고 종료하기 :wq와 같은 기능

i : 삽입모드로 가기(글자 왼쪽에서)

a : 삽입모드로 가기(글자 오른쪽에서)

A : line 끝에서 입력모드로

o : 다음줄에 입력모드 시작

O : 윗질에서 입력모드 시작

hjkl : 방향키 좌 하 상 우

w : 단어단위 점프

ctrl+f : 페이지 다운

ctrl+u/b : 페이지 업

cw : 하나의 단어 변경

dw : 한 단어 삭제

v : 드래그/ 블록지정

y : 복사

p : 붙여넣기

yy : 라인 복사

dd : 라인 지우기

x : 글자 지우기

X : 백스페이스

r : 한글자만 바꾸기

/<검색어> : 다음 단어 찾고 싶으면 n 누르기. 이전 단어는 b

【Algorithm】 [프머] 2018 KAKAO BLIND RECRUITMENT 자동완성

(Algo) [프머] 2018 KAKAO BLIND RECRUITMENT 자동완성

1. sort

a. 앞과 뒤 문자와 비교하기

def solution(words):
    answer = 0
    words.sort()
    
    
    for idx in [0, len(words)-1]:
        cases = -1 if idx > 0 else 1
        for order in range(len(words[idx])):
            try:
                if words[idx][order] == words[idx+cases][order]:
                    answer += 1
                else:
                    answer += 1
                    break
            except:
                answer += 1
                break
                
    
    for idx in range(1,len(words)-1):
        left = 0
        right = 0
        for order in range(len(words[idx])):
            try:
                if words[idx-1][order] == words[idx][order]:
                    left += 1
                else:
                    left += 1
                    break
            except:
                left += 1  
                break
        for order in range(len(words[idx])):
            try:
                if words[idx][order] == words[idx+1][order]:
                    right += 1
                else:
                    right += 1
                    break
            except:
                right += 1  
                break
        answer += max(left,right)
    return answer

b. 맨앞 알파벳부터 모든 단어 비교하기(나의 풀이)

img

def solution(words):    
    
    words.sort()
    
    # make zero vector
    counter_vector = []
    for i in range(len(words)):
        counter_vector.append([0 for j in range(len(words[i])+1)])
    
    # fill counter_vector
    word_stack = ['0']*MAX_COUNT
    for i in range(len(words)):
        fill_current_vector(i,words,counter_vector,word_stack)
    
    #print(counter_vector)

    # return answer
    answer = 0
    for i in range(len(words)):
        answer += sum(counter_vector[i])
    return answer




MAX_COUNT = 1000


def fill_current_vector(current_word,words,counter_vector,word_stack):
    while(1):
        current_step = counter_vector[current_word].index(0)
        word_stack[current_step] = words[current_word][current_step]
        
        for i in range(current_word,len(words)):
            if current_step > len(words[i])-1 : break
            if word_stack[current_step] == words[i][current_step] and counter_vector[i].index(0) == current_step :
                counter_vector[i][current_step] = 1
            else : break
        
        # break condition 1
        if counter_vector[current_word][-2] == 1 : break
        # break condition 2, 3
        if current_word == len(words)-1 : break
        else:
            if counter_vector[current_word+1][current_step] == 1 : pass
            else : break

2. Trie

Trie구조를 사용하기 위한 python 기본 지식cur = dict()ccur = {}cur[‘c’] = ‘value’ cur[‘c’] = {‘num’ :1}print(cur) » {‘c’: {‘num’: 1}}

a.

img

def solution(words):
    char_freq = {}
    for word in words:
        cur = char_freq
        for char in word:
            try:
                cur[char]['num'] += 1
            except:
                cur[char] = {'num':1}
            cur = cur[char]  # cursor 를 마지막에 갱신

    res = 0

    for word in words:
        cur = char_freq
        for char in word:
            res += 1
            if cur[char]['num'] == 1:
                break
            else:
                cur = cur[char]
    return res

b.

def solution(words):
    word_dict = build_dict(words)
    total_num = 0
    for word in words:
        for i in range(len(word)):
            if len(word_dict[word[:i+1]]) == 1:
                total_num += i + 1
                break
        else:
            total_num += len(word)
            
    return total_num

def build_dict(words):
    d = {}
    for word in words:
        for i in range(len(word)):
            if not d.get(word[:i+1]):
                d[word[:i+1]] = [word]
            else:
                d[word[:i+1]].append(word)
    return d

【Ubuntu】 필수 Ubuntu 설치 과정 Tip

(ubuntu) 몇번째 설치 중 인지 모르겠을 Ubuntu

0. SSD 포멧하기

우분투 설치 USB로 포멧이 가능하다고 믿지만, 사실은 아니다.

SSD에 원래 우분투가 있었다면, 그 곳에 덮어쓰기하면서 문제가 발생할 수 있다.

따라서 꼭 포멧하고 설치하기

1. 바이오스 환경설정

  • fast bootup & fast setup : OFF
  • UEFI booting으로 설정
  • securiry boot : OFF

2. 우분투 설치

하드 2개 이용해서 설치하기 :

https://askubuntu.com/questions/1033497/dual-boot-windows-10-and-linux-ubuntu-on-separate-ssd

$ sudo update-grub
# 모든 우분투 설치가 완료되고 마지막에 할 것. # 결과는 Microsoft의 새로운 EFI가 감지되었다고 하며, 새로운 EFI를 add처리한다.

설정 방법 :

/dev/nvmeOn1p1 : 134MB

/dev/nvmeOn1p1 swap : 12287MB

/dev/nvmeOn1p1 efi : 500MB #legacy boot first로 하면 이것으로 설정 불가능

/dev/nvmeOn1p1 ext4 / : 나머지MB

3. 잘 설치 되었나 확인

a. apt-get 잘되는지 확인

sudo apt-get update sudo apt-get install kolourpaint4 kolourpaint

b. 문제 발생시 서버 사이트 변경

koreaUbuntu -> daum.kakao

https://twpower.github.io/99-change-apt-get-source-server

c. 한영키 전환

언어 설정 고급관리에서 -> 언어팩 자동 다운로드

ibus-setup https://tobelinuxer.tistory.com/15

img

이거 하고 재부팅!

그리고 ibut-setup 설정을 위 사이트처럼 하기

d. chrome 설치

e. chrome 북마크등 synchronizing하기

4. docker설치 & git config하기

$ git config –global user.name “junha1125” $ git config –global user.email sb020518@naver.com

5. graphic driver설치

이 사이트 이용

Nvidia driver를 설치하지 않으면 Dual Moniter에 문제가 발생할 수 있다. -> black screen

$ sudo apt-get update $ ubuntu-drivers devices $ sudo ubuntu-drivers autoinstall $ sudo reboot

6. anaconda 설치

https://hiseon.me/python/ubuntu-anaconda-install/

https://pytorch.org/get-started/locally/

7. visual studio code 설치

https://code.visualstudio.com/docs/setup/linux

$ sudo snap install –classic code $ code # VScode 실행하기 [항상 터미널로 code실행]

8. cuda&cudnn 설치

https://hiseon.me/linux/ubuntu/cuda-install/

Pagination


© All rights reserved By Junha Song.