전체 글 260

10. Swift Protocol

Protocol: 규약, 약속 꼭 구현되어야하는 method나 Property(속성) 같은것들이다. 즉, 어떤 서비스를 이용할 때 반드시 필요한 것들이 있을 것인데, 프로토콜을 서비스에서 반드시 필요한 일, 요소들을 의미한다. Integer 도 Structure로 구성되어 있다. public struct Int : FixedWidthInteger, SignedInteger 여기서 FixedWidthInteger, SignedInteger 이 프로토콜이라는 놈들이다. public protocol CustomStringConvertible { public var description: String {get} } 여기서 CustomStringConvertible이 protocol이라고 선언이 되면 내부에 있는..

9. Swift Structure practice

// 도전과제 // 1. 강의이름, 강사이름, 학생수를 가지는 구조체 만들기 (Lecture) // 2. 강의 array와 강사이름을 받아서, 해당 강사의 강의이름을 출력하는 함수만들기 // 3. 강의 3개를 만들고, 강사이름으로 강의찾기 struct Lecture { let lectureName: String let lectureTeacher: String let numOfStudent: Int } let lec1 = Lecture(lectureName: "OS", lectureTeacher: "김호원", numOfStudent: 40) let lec2 = Lecture(lectureName: "Database", lectureTeacher: "이기준", numOfStudent: 50) let lec3..

8. Swift Structure

// Structure: 관계가 있는 것들을 묶어서 표현한 것 // Structure와 Class는 동작이 다르다. // 구조체는 Value Types으로 변수에 할당될 때 Copy되어 할당된다. // 클래스는 Reference Types으로 변수에 할당될 때 참고되는 형태(공유)로 할당된다. // Structure는 Stack에 할당되고, Class는 Heap에 할당이 된다. // let pClass1 = PersonClass(name: "me") // let pClass2 = pClass1 // pClass2.name = "Hey" // pClass1.name // Hey // pClass2.name // Hey // let pStructure1 = PersonStruct(name: "me") // ..

7. Swift Closure 조금더

// Closure 보강!!!! // 함수는 어떤 기능을 수행하는 코드블록이며, // Swift에서는 함수와 같이 기능을 수행하는 코드블록의 특별한 타입인 Closure가 존재한다. 사실 Closure가 더 상위 개념이다 // Swift 공식사이트에서 정의한 Closure: // Closure는 크게 3가지 타입이 존재한다. // Global functions are closures that have a name and don’t capture any values. // Nested functions are closures that have a name and can capture values from their enclosing function. // Closure expressions are unna..

6. Swift Closure basic

// Closure : 이름이 없는 메소드라고 생각하면 된다. // (Int, Int) -> Int : 클루져의 타입 var multiply1: (Int, Int) -> Int = { (a:Int, b:Int) -> Int in return a * b } // 여기서 간략하게 쓸 수 있다. // a, b는 Int로 들어올 것이고, 반환도 Int로 한다고 type을 지정했다. var multiply2: (Int, Int) -> Int = { a, b in return a * b } // 그리고 들어오는 파라미터의 index를 나타낼 수 있다. var multiply3: (Int, Int) -> Int = { return $0 * $1 } var multiplyClosure: (Int, Int) -> Int..

5. Swift Collection(Dicionary, Set)

// Dictionary // 순서가 없이 key와 value로 구성된다. // 커피에 이름을 적는 것과 비슷한 구조이다. // Key는 Unique해야한다. var scoreDic: [String: Int] = ["Jason": 80, "Jay": 95, "Jake": 90] var scoreDic1: Dictionary = ["Jason": 80, "Jay": 95, "Jake": 90] print(scoreDic) print(scoreDic["Jay"]) // Optional type이다. 없을 수 있기때문 print(scoreDic["duddn"]) // nil 값이 나온다. if let score = scoreDic["Jay"] { print(score) } // isEmpty, count pr..

4. Swift Collection (Array)

// Collection 컬렉션, 수집 ... // 수많은 변수를 하나의 통에 넣어 관리하면 편하다 // 이때 통에서 순서를 두어 커피를 나눠줄 수 있다. // 커피에 이름이 새겨 구분하여 나눠줄 수 있다. // Array, Dictionary, Set, Closure // Array : 동일한 타입, 순서index var evenNumbers: [Int] = [2, 4, 6, 8] var evenNumbers2: Array = [2, 4, 6, 8] evenNumbers.append(10) //let이면 오류뜬다. print(evenNumbers) evenNumbers += [12, 14, 16] print(evenNumbers) evenNumbers.append(contentsOf: [18, 20])..

3. Swift Optional

//Optional: 있는 것과 없는 것을 모두 표현하기 위함 // 코드 중간에 ?, !가 들어가서 이상해 보일 수 있다. // var name: String = "Joon" // 없는 것에 대해 표현하기 애매하다. 없는 것을 어떻게 표현할 것인가!! // var dogName: String = ??? // 존재하지 않음을 표현 : nil(없을 무), None과 유사 var carName: String? //Optional 변수의 표현 //여러분이 최애하는 영화배우 이름을 담는 변수 작성하기, 타입:String //let num = Int("10") 에서 num의 type는? var favoriteActor: String? = nil // 없을 수 있다. print(favoriteActor) //여기서 ..

2. Swift Function

//object의 멤버함수를 method, 전역함수를 function라고 한다. func printTotalPrice(price: Int, count: Int){ print("1. \(price*count)") } printTotalPrice(price: 1500, count: 5) //이렇게 parameter를 지정해 주어야한다. //지정안하고 보내는 방법이 존재한다. //어떻게? parameter 앞에 _를 붙힌다. //parameter의 이름을 지정할 수 있는 형식이다. //"가격"은 밖에서만, "price"는 함수 내에서만 사용가능!!!! func printTotal1(_ price: Int, _ count: Int){ print("2. \(price*count)") } printTotal1(15..

3-3. Loading Data from File (파일데이터 읽어오기)

모두를 위한 머신러닝 / 딥러닝 강의: hunkim.github.io/ml/ 목차 1. 파일에서 원하는 데이터 읽어오기 2. Queue Runners : 데이터가 너무 클때 1. 파일에서 원하는 데이터 읽어오기 해당 파일은 .csv 파일이며 흔히 알고 있는 .excel과 유사한 파일이라고 생각할 수 있다. CSV(Comma-separated values)은 File Format이며, 콤마를 기준으로 데이터를 구분하는 파일이다. 그렇다면 이 csv파일은 어떻게 읽어오는가? numpy에 존재하는 loadtxt를 이용하면 손쉽게 파일을 Read 할 수 있다. 여기서 데이터의 구분은 ', '콤마로 하고 데이터의 타입은 실수32비트로 설정하였다. 여기서 모든 데이터는 같은 데이터 타입을 갖는다. 해당 슬라이싱 연..

3-2. 여러개의 입력의 Linear Regression 구현 (by Tensorflow)

모두를 위한 머신러닝 / 딥러닝 강의: hunkim.github.io/ml/ Multi-variable linear regression 우리는 이제 변수 3개에 대한 출력이 1개인 데이터 셋을 학습시키려한다. 변수가 3개라면 각각의 변수에 대한 weight(가중치)가 존재할 것이고 이 가중치가 곱해진 변수들의 합은 Hypothesis(가설, 직선)을 나타낸다. cost를 정의하고 optimizer를 Gradient Descent Algorithm 을 사용하여 minimize cost를 구하도록 설정하였다. 이제 train을 tf.Session().run(train)을 실행하면 cost는 최소를 구하도록 operation할 것이다. 그리고 학습과정에서 cost와 hypothesis값들의 변화를 출력하기 위..

3-1. 여러개의 입력(feature)의 Linear Regression 개념

모두를 위한 머신러닝 / 딥러닝 : hunkim.github.io/ml/ 지난 시간 복습 Hypothesis (가설, 직선) : Weight와 bias의 값을 학습하게 된다. Cost function (cost,loss를 어떻게 정의하는가) : W와 b의 함수이다. 예측값과 실제값의 차이의 제곱평균을 구해서 cost를 구한다. Gradient descent algorithm (cost를 최소로하는 알고리즘) : 그 cost의 경사면을 따라 감소하는 방식의 알고리즘 여러개의 입력(feature)의 Linear Regression 개념 Multivariable Linear Regression 기존의 데이터는 하나의 Input에 대해서 모델을 만들고 학습을 시켜왔다. But, 실제는 여러개의 데이터의 얽히고 ..

2-6. Linear Regression cost함수 최소화 구현(by TensorFlow)

모두를 위한 머신러닝 / 딥러닝 : hunkim.github.io/ml/ Graph -> import matplotlib.pyplot 우선 우리는 이 cost라는 놈이 어떻게 생긴지 보자!! ● run을하기 위해 Session을 만들어 주고 초기화 과정을 거치도록 한다. ● W의 경우 -3~5까지 0.1크기로 작게 움직이겠다는 의미를 나타낸다. ● 두 개의 list에 append하여 plt.plot()의 인자로 전달하면 각 list는 x,y축을 기준으로 그래프를 형성한다. ● plt.show()로 그래프를 출력한다. Gradient descent 알파는 learning_rate를 의미하고 작은 값을 사용한다. 다른 것은 수식 그대로 계산하는데 마지막 W값의 교체는 tensor안에 존재하는 assign을 ..

2-5. Linear Regression cost함수 최소화 개념

모두를 위한 머신러닝 / 딥러닝: hunkim.github.io/ml/ 지난시간 배웠던 것 저번 시간에 배웠듯이 우리는 Wx+b라는 Hypothesis로 model을 만들었고 실제 값과의 차이의 제곱평균하여 cost를 구하는 것인데, 이때 학습과정에서 cost를 줄이는 최적의 W와 b를 찾아 데이터가 근사된 일차함수를 찾는 것이 목적이다. How to minimize cost (어떻게 cost를 최소화 할까?) 여기서 b가 없다고 가정하여 비교적 쉬운 hypothesis 모델을 만들어 보자 위의 그래프는 Cost와 W(weight)의 관계를 그래프로 그린 것이고 여기서 cost가 최소인 값을 기계식으로 찾아가는 것인데 이때 알고리즘이 필요하다.!!! 이때 많이 사용되는 알고리즘이다. 경사를 따라 내려가는..

2-4. Linear Regression by Tensorflow (선형회귀 구현)

모두를 위한 머신러닝 / 딥러닝 : hunkim.github.io/ml/ 주어진 x값에 대해서 예측을 어떻게 할 것인가가 Hypothesis 이고, W(weight)와 b(bios)의 합이다. 이렇게 예측한 값과 true value의 차이를 제곱으로 계산하여 평균하면 cost function의 값을 구할 수 있고, 이것의 최소값을 구하는 것이 우리의 목적이다. 이 Hypothesis(가설, 직선)는 W와 b에 따라 달라지고 cost역시 W와 b를 인자로 갖는 function이다. 여기서 우리가 말하는 학습이라는 것은 데이터를 읽어들이면서 이 cost값을 최소로 하는 W와 b의 값을 찾는 것이다. Tensorflow의 큰 구조 3단계 1. 그래프를 build한다. 2. 해당 그래프를 실행한다. 3. ret..

2-3. Linear Regression 개념

모두를 위한 머신러닝/딥러닝 강의: hunkim.github.io/ml/ Linear Regression (선형 회귀) supervised learning를 한다고 하면 0~100에서의 데이터를 예측하는 경우 regression이라고 했는데 그렇다면 해당 데이터는 supervised learning를 위해 regression algorithm을 위한 trainning set이 되는 것이다. 해당 training set로 학습을 시키면 model이 생성되고 원하는 x를 넣어 prediction y를 구할 수 있게 되는 것이다. 그럼 이 tainning set이 존재하면 그 데이터들간의 Linear한 특징을 갖을 거라 가정하고 예측하는 기법이 Linear regression이다. 이렇게 일차함수 형식의 Li..

2-2. Hello TensorFlow (basic tensorflow)

모두를 위한 머신러닝 딥러닝 강의: hunkim.github.io/ml/ 영상 필수시청: www.youtube.com/watch?v=XNDo6ad7ICA 깃허브 코드다운 주비터 노트북 사용법 텐서플로우 version1로 다운그레이드 방법 영상에서 사용되는 코드주소: github.com/hunkim/DeepLearningZeroToAll 주비터 노트북 사용방법: copycoding.tistory.com/72 Anaconda 가상환경 설정: http://asq.kr/SaF3jqELi3EZ3 아나콘다? : url.kr/gZ9l2S 주비터 노트북? : blog.naver.com/PostView.nhn?blogId=hobbang143&logNo=221464304548 텐서플로우? : blog.naver.com/h..

2-1. Anaconda, Jupyter Notebook, tensorflow??

아나콘다? : blog.naver.com/PostView.nhn?blogId=hobbang143&logNo=221461726444&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 주비터 노트북? : blog.naver.com/PostView.nhn?blogId=hobbang143&logNo=221464304548 텐서플로우? : blog.naver.com/hobbang143/221463489187 공부하기 좋은 블로그: blog.naver.com/PostList.nhn?blogId=hobbang143&from=postList&categoryNo=100&parentCategoryNo=100 수박 : 네이버 블로그 ..