* 강의를 듣고 필기한 내용일 이후에 따로 정리한 내용입니다.
컴퓨터= 계산기
- compute(계산하다) -er(~하는 사람) : 정말 계산만 밖에 못 하지만 고도화 된 기술을 한 것
- 논리구조의 다양한 조합으로 사용하는 것
- 0과 1의 논리연산을 짜는 게 중요한 것
- 1. 계산할 숫자 저장 : 데이터, 2. 계산 방식 : 연산자, 3. 이전 결과 저장 : 기억
- 이진수 숫자가 어떤 걸 다루는가?
- Alan Turing : 인공지능의 아버지, 컴퓨터의 초안을 만든 사람. 1936년에 a-machine이라는 수학 할 수 있는 기계를 만듬
- 이 기계는 기호학을 기반으로 만들어짐 (여러 기호들을 이용-> 논리 연산 수행)
- 컴퓨터는 9과 1의 조합으로 여러 논리식들을 표현할 수 있다 : 논리식 = 논리회로 -> cpu나 보드가 나오고 전기신호로 인해서 사용
컴퓨터 내부구조 이해
Von Neumann Architecture
- 논리 계산을 위해서 필요한 기본적인 요소들을 정의한 구조 : 현대 거의 대부분의 컴퓨터는 이 구조로 이루어져있음
- CPU, Memory, I/O Device로 구성되어있음 : CPU가 가장 중요함! 속도가 빠르면 좋겠다-> CPU를 업그레이드하면 된다
- input device(마우스, 키보드) -> CPU, RAM, SSD -> Output Device (모니터, 프린터)
- CPU(Central Processing Unit) : 컴퓨터에서 수행하는 여러 명령들을 수행하는 곳
컴퓨터에서 처리되는 모든 것들을 CPU에서 처리한다.
실행되는 명령의 순서 관리(Control Unit)+실제 연산처리(Arithmentic/Loic Unit)
- Memory-SSD(Solid State Drive) : CPU가 처리해야 할 모든 데이터는 Memory Unit에서 관리
데이터를 반영구적으로 저장할 수 있음, 많은 데이터를 담을 수 있음
SSD는 전원이 꺼져도 데이터 보존. 저장 기능을 통해서 SSD에 데이터를 기록
USB/자기 테이프/하드디스트 같은 것도 메모리
- Memory-RAM(Random Access Memory) : RAM은 전원공급이 도지 않으면 모두 지워짐.-> 처리 완료 후 SSD에 저장
RAM에는 2가지 종류 : SRAM이 더 빠르고 비쌈, DRAM이 조금 느리고 쌈
CPU는 성능을 위해서 SSD가 아닌 RAM에 담긴 정보를 사용
휘발성 :코딩으로 보는 결과는 Ram에서 보여줌
- Input/Output Device : IO라는 말로 씀 : CPU랑 메모리를 합쳐서 연산처리
IO는 정보가 왔다갔다한다는 것(외부)- 네트워크, 마우스, 키보드, 모니터, 프리터 전부
입력값을 넣기 위함 Input, 컴퓨터가 처리한 것을 보여주기 위함 Output
컴퓨터 작동원리 배우기
우리가 쓰는 코드는 전부 RAM에 올라가있음
- cpu가 ram이랑 소통을 하고 ram에서 ssd에서 저장과 불러오기를 함
- ram에서 request와 response를 해서 www(온라인)과 통신을 함
컴퓨터가 이해하는 언어
사람이 쓰는 언어 : Natural Language(자연어)
컴퓨터가 쓰는 언어 : Formal Language(형식 언어) - Science Language
사람과 컴퓨터를 이어주는 언어 : Programming Language(프로그래밍 언어)
- C언어 : 시스템 제어를 위해 사용하는 언어
- 컴퓨터의 여러 하드웨어를 제어하기 위해서 만들어진 언어
- 1972년 UNIX 운영체제를 만들기 위한 만들어짐 : 직접 컴퓨터 메모리에 접근, 여러 시스템 명령을 호출
- 요즘엔 IoT 개발을 위해 사용됨
- legacy(버전)을 굉장히 예전 껏을 써도 괜찮음 (python은 예전 버전과 호환을 안해서 계속 업데이트가 필요)
- C언어를 하면 컴퓨터를 조금 더 잘 알 수 있음 - Python : AI를 만들때 많이 사용되는 언어
- 91년도에 만들어짐, 2000년대에 와서 인기가 있어지고(쉬워서) + 최근 AI가 발전되면서 확 인기 있어짐
- C언어 같은 언어들보단 휠씬 쉽다 : 파이썬 자체가 쉽지는 않지만, 다른 언어들보단 쉽다.
- 내부 시스템을 정확히 몰라도 편하게 여러 기능들을 구현하기 쉽게 만들어짐
- AI에서는 수학, 통계, 컴공, 산업공학 등 여러 분야의 지식을 필요하므로 코딩 난이도가 낮아야함 : 파이썬 인기가 있어짐
- PyPI : 파이썬 프로그래밍 언어의 패키지 및 모듈을 호스팅하고 배포하는 공식 저장소 : 오픈 소스 생태계 발전+패키지,라이브러리가 많다
- AI를 위해서 필요한 데이터 수집, 처리, 시각화, AI모델 개발 등 여러 요소를 모두 지원함.
* 이번 부트캠프에서 가장 중요한 것은 Python이다. 파이썬이 안되면, 뒤에서 힘들다. 꼭 파이썬을 열심히 공부하기.
* 부트캠프가 끝나고 무엇을 하고 싶은지에 대해서 꼭 생각하기. : 부캠 7개월은 길다. 매일 8시간이기에...->시간이 많이 쓰여진다. : 마지막에 애매해지는 경우들은 그저 부캠을 따라가는 것 : 부캠이 끝나면 방황을 하게 됨 : 최악의 선택 -> 부캠을 또 들음 : 시간낭비
- Javascript : 웹 페이지를 만들기 위해 사용되는 언어
- 95년에 만들어진 언어, 90년대 말부터 굉장히 많은 웹 페이지들이 만들어지며, 이를 위한 언어가 필요해져서 생김
- 현재 사용되는 모든 웹 브라우저는 Javascript를 자체적으로 실행할 수 있는 능력이 탑재되어있음
- 모든 웹페이지가 Javascript의 여러 기능들을 통해 구현되어있다 - Programming Language , 프로그래밍 언어의 기본적인 특징
- 프로그래밍 언어도 사람이 사용하는 언어처럼, 기술한 텍스트가 어떤 의미를 가지는지 정의
- 모든 프로그래밍 언어는 자체적인 문법을 가지며, 사람의 언어와 다르게 문법이 틀리면 절대 동작하지 않음
: 문법을 완벽하게 알아야함. 정말 외워야함 : 많이 써보면 외워진다. : 이게 틀리면 무조건 틀린다. 오류가 나면 내잘못이다.
- 프로그래밍 언어 자체는 사람의 언어(영어)로 쓰여짐, 이를 컴퓨터가 이해할 수 있는 기계어(Machine Instruction)으로 번역하는 프로그램인 Compiler/Interpreter가 필요하다.
- Complier/Interpreter를 컴퓨터에 설치해서 해당 프로그래밍 언어를 사용할 수 있다.
- Coding : 코드를 적는 행위, 어떠한 Logic을 순차적으로 실행하도록 동작하며 이를 위해서 사람이 직접 코드를 작성해야함
- Programming : 작성된 코드들로 구성된 logic이 특정 기능들을 하면서 프로그램을 만들어가는 과정
- Programming Language : 컴퓨터에게 우리가 하고 싶은 여러 작업을 시킬 수 있게 해주는 소통 체계
컴퓨터에게 일 시키기
코드는 어떻게 적어야할까? : 코딩 : 코드를 쓰는 것임
증명처럼 step by step에 맞추어서 진행하기
컴퓨터에서 돌아갈 수 있게 하냐? 어떻게 하냐가 중요함
컴퓨터에게 시키는 이유 : 시간이 오래 걸리고, 귀찮고 단순함 -> 기계에게 시키고 싶음. : 암호를 찾는 것도 그저 연산임.
현재 암호 : 못푼다X, 현재 컴퓨터로 못푼다O : 수학적으로는 해가 존재. 양자컴퓨터에서는 풀림.
Flowchart : 원하는 답을 찾기 위해서는 변수와 조건과 반복이 필요함
- 변수(데이터) 조건(데이터가 원하는 데이터인지 체크를 반복)
코딩 = 프로그래밍 = 개발?
개발 = 프로그래밍 + 환경 + 문서화(Documentation)
- 작성한 프로그램이 실제 환경에서 동작하는 모든 과정까지 포함하는 과정
- 대부분 여러 사람이 함께 작업에 참여하며, 실제로 사용되는 서비스를 만들기 위한 전체 과정을 의미
- 만들어진 코드를 유지/보수하는 것부터 프로그래밍 자체만이 중요한 것이 아니라 무엇을 만들어야하는 명세사항, 협업문서,프로그램과정, 일하는 방식 모두 포함함
- 프로그램 개발을 잘하기 위해서는 컴퓨터 시스템 이해, 작동하는 환경과 구현해야하는 기능에 대한 명확한 이해가 필요
개발은 개인플이 아니다: 나혼자 하기보다는 커뮤니케이션을 하는데, 사람의 말은 전달하는데 오류가 있을 수도 있어서 문서화가 필요 : 과거에 내가 짠 것도 모른다. 나도 꼭 문서화가 필요함.
개발 = 협업이다. 팀프로젝트를 꼭 할 줄 알아야한다. 협업을 할 줄 알아야한다.
꼭 알아야할 것
- int, float, str, list, tuple, dict, set
1. 데이터 타입 정의
2. mutable VS immutable
- mutable - list, dict, set
- immutable - int, float, str, tuple
3. 연산자 정의
4. 데이터 타입별 주요 함수
코딩테스트 공부
1. 학점 계산하기
1) 단순 계산
print((3 * 4.5 + 3 * 2.0 + 2 * 3.5 + 3 * 4.0) / 11)
2) dictionary를 사용하는 맵핑구현
# grade map을 만드는 것
grade_map = {'A+' : 4.5, 'A' : 4.0, 'B+' : 3.5, 'B' : 3.0, 'C+' : 2.5, 'C' : 2.0, 'F' : 0.0}
credit_map = {"글쓰기" : 3, "미적분학I" : 3, "영문법특강" : 2, "컴퓨팅사고력" :3}
(credit_map['컴퓨팅사고력'] * grade_map['A+'] + credit_map['미적분학I'] * grade_map['C']\
+ credit_map['영문법특강'] * grade_map['B+'] + credit_map['글쓰기'] * grade_map['A'])\
/ (credit_map['컴퓨팅사고력'] + credit_map['미적분학I'] + credit_map['영문법특강'] + credit_map['글쓰기'])
- 같은 코드는 한 줄이 원칙 : 만약 엔터를 치고 싶으면 \(백슬레쉬)를 쳐주면 된다
- 쥬피터 노트북은 셀 단위 실행이 있기 때문에 , 뒤에 엔터를 쳐도 문제가 없다!
- 스페이스바를 뛰우는 것은 취향차이지만, 보기 쉬운 코드를 짜는 게 좋다
2. 십의 자리 구하기
1) type casting + indexing
num = 46351633
print(int(str((num)[-2])))
# a = str(number)
# a = a[-2]
# a =int(a)
- 3줄로 쓸 수 있는 걸 1줄로도 쓸 수 있다.
- -2는 뒤에서 2번째를 말하는 것이다.
2) 연산
print(number % 100 // 10)
3.출력하기
- 포멧을 먼저 정하고 구하기
epoch = 10
train_accuracy = 0.85; val_accuracy = 0.83; test_accuracy = 0.761234
model_name = "ResNet44"
- train_accuracy = 0.85; val_accuracy = 0.83; test_accuracy = 0.761234 : 여기 사이에 ;를 적어야한다. : 나눠주는것
1) print 함수 %
print("%s 모델로 %d epoch를 돌려 학습시킨 결과는 학습 정확도 : %.2f, 검증 정확도 : %.2f, 테스트 정확도 : %.2f으로 나왔습니다." \
% (model_name, epoch, train_accuracy, val_accuracy, test_accuracy))
- %s : 문자, %d : 정수, %f : 실수
2) str.format()
print("{} 모델로 {} epoch를 돌려 학습시킨 결과는 학습 정확도 : {}, 검증 정확도 : {}, 테스트 정확도 : {}으로 나왔습니다."\
.format(model_name, epoch, train_accuracy, val_accuracy, test_accuracy))
3) f-string
print(f"{model_name} 모델로 {epoch} epoch를 돌려 학습시킨 결과는 학습 정확도 : {train_accuracy}, 검증 정확도 : {val_accuracy}, 테스트 정확도 : {test_accuracy}으로 나왔습니다")
-> 소숫점 셋째자리로 바꾸려면
# print 함수 %
print("%s 모델로 %d epoch를 돌려 학습시킨 결과는 학습 정확도 : %.3f, 검증 정확도 : %.3f, 테스트 정확도 : %.3f으로 나왔습니다." \
% (model_name, epoch, train_accuracy, val_accuracy, test_accuracy))
# str.format()
print("{} 모델로 {} epoch를 돌려 학습시킨 결과는 학습 정확도 : {:.3f}, 검증 정확도 : {:.3f}, 테스트 정확도 : {:.3f}으로 나왔습니다.".format(model_name, epoch, train_accuracy, val_accuracy, test_accuracy))
# f-string
print(f"{model_name} 모델로 {epoch} epoch를 돌려 학습시킨 결과는 학습 정확도 : {train_accuracy:.3f}, 검증 정확도 : {val_accuracy:.3f}, 테스트 정확도 : {test_accuracy:.3f}으로 나왔습니다")
- print 함수 % : %.2f 를 %.3f로 바꾸면 됨
- str.format() : 원하는 곳에 뒤에 {:.3f}를 추가. {} -> {:.3f}라고 적음
- f-string : 원하는 곳에 뒤에 {:.3f}를 추가. {accuracy} -> {accuracy:.3f}라고 적음
4. 문자열 연습하기
1) str.replace()
oldman_id.replace('234567',"******")
1-2) 슬라이싱을 이용하여
youngman_id.replace(youngman_id[-6:], '******')
슬라이싱
- [0:5] == 0,1,2,3,4 # start는 포함. stop은 포함되지 않음.
- [:5] == 0,1,2,3,4 # start를 생략하면, 맨 처음부터 (index 0가 생략됨)
- [3:] # stop을 생략하면, 맨 뒤까지 (index len(youngman_id)가 생략됨)
- [-6:] # 뒤에서 6개라는 의미
2) str 덧셈 연산
youngwoman_id[:-6] + '******'
5. 리스트 연습하기
1) list.append()
# 어제 예약목록 처리
book.append(107)
book.append(203)
book.append(304)
book.append(507)
2) list 덧셈
book = book + [107,203,304,507]
3) list.extend()
book.extend([107, 203, 304, 507])
# 예약 취소 처리
book.remove(205)
book.remove(304)
6. if문 연습하기
- 패스워드가 8자리 이상
password " adsafdsf1435r4"
if len(password) < 8:
print("약함")
else:
if password.isalnum():
if password.isalpha() or password.isdigit():
print("약함")
else:
print("강함")
else:
print("약함")
- shift +tab (쥬피터노트북)/ ctrl + shift + space 을 누르면 코드를 확인할 수 있음
- str.isalpha() : 알파벳으로만 구성되어있어야 true, 아니면 false
- str.isdigit() : 숫자으로만 구성되어있어야 true, 아니면 false
- str.isalnum() : 알파벡 문자와 숫자로만 구성되어있어야 true, 아니면 false
3. 별 출력하기
1) 이중 for 문, nested loop
for i in range (number, 0, -1):
for j in range(i):
print("*", end='')
print()v
2) str 곱셈 연산
for i in range(number):
# i -> 5-i
print('*' * (number-i))
'Upstage AI LAB 부트캠프 5기 > 실시간 공부내용 복습' 카테고리의 다른 글
[2024.10.07] Statistics 기초 강의 (3) | 2024.10.07 |
---|---|
[2024.10.04] 파이썬 프로그래밍 이해하기 (8) | 2024.10.04 |
[2024.10.01] 파이썬 프로그래밍 이해하기 (9) | 2024.10.02 |
[2024.09.25] Python 기초 강의 공부 내용 정리 (15) | 2024.09.25 |
[2024.09.24] Python 기초 강의 공부 내용 정리 (6) | 2024.09.24 |