[swift] 03. Collection Type (컬렉션 타입)


컬렉션 타입은 데이터들의 집합 묶음


Array

데이터 타입의 값들을 순서대로 지정하는 리스트 (배열)

Dictionary

순서없이 키(key)와 값(Value) 한 쌍으로 데이터를 저장하는 컬렉션 타입

Set

같은 데이터 타입의 값을 순서없이 저장하는 리스트(중복 없음)




배열 생성 방법

var arrayName: Array<DataType> = Array<DataType>()
var arrayName2: [DataType] = []

배열 코드

var numbers: Array<Int> = Array<Int>() // 기본적인 배열 선언
numbers.append(1) // numbers에 값 1을 추가
numbers.append(2)
numbers.append(3)

numbers[0]
numbers[1]

numbers.insert(4, at: 2) // 2번 index에 4의 값을 추가

numbers.remove(at: 0) // 0번 index의 값을 삭제
numbers

출력

[2, 4, 3]




딕셔너리 생성 방법

var dic: Dictionary<KeyDataType, ValueDataType> = Dictionary<KeyDataType, ValueDataType>()
var dic2: [KeyDataType, ValueDataType] = [KeyDataType, ValueDataType]

딕셔너리 코드

var dic: [String: Int] = ["권태완": 1]
dic["김철수"] = 3
dic["김민지"] = 5
dic.removeValue(forKey: "김철수") // Key가 "김철수"인 값을 제거

출력

["김민지":5, "권태완":1]




set 생성 방법

var set: Set = Set<DataType>()
// set은 축약형 선언이 없다.

코드

var set: Set = Set<Int>()
set.insert(5)
set.insert(10)
set.insert(20)
set.insert(30)
set.insert(30)
set.insert(30)

set.remove(5) // 5 삭제

출력 결과

{10, 20< 30}

[swift] 02. Data Type (기본 데이터 타입)


  • Int: 64bit 정수형
  • UInt: 부호가 없는 64bit 정수형
  • Float: 32bit 부동 소수점
  • Double: 64bit 부동 소수점
  • Bool: true, false 값
  • Character: 문자
  • String: 문자열
  • Any: 모든 타입을 지칭하는 키워드


코드

// Int
var someInt: Int = -100
someInt = 100

// UInt
var someUInt: UInt = 200
// someUInt = -200 // error

// Float
var someFloat: Float = 1.1
someFloat = 1

// Double
var someDouble: Double = 1.1
someDouble = 1

// Bool
var someBool: Bool = true
someBool = false

// Character
var someCharacter: Character = "가"
someCharacter = "A"
someCharacter = "😀"
// someCharacter = "abcdefg" // error

// String
var someString: String = "안녕하세요 😀"

// 타입 추론
var number = 10 // 데이터 타입을 명시하지 않아도 컴파일러가 자동적으로 number는 Int형 변수라는 것을 판단한다.

[swift] 01. let, var (상수와 변수)


상수

변하지 않는 일정한 값

let 상수명: 데이터 타입 = 값


코드


// 상수
// let 상수명: 데이터 타입 = 값
let a: Int = 100
// a = 200 -> error


출력 결과

100




변수

변할수 있는 값

var 변수명: 데이터 타입 = 값


코드


// 상수
// let 상수명: 데이터 타입 = 값
var a: Int = 100
b = 300


출력 결과

300

고급 경사 하강법 성능 비교


코드

# 파일 선택을 통해 예제 데이터를 내 컴퓨터에서 불러옵니다.

# 딥러닝을 구동하는 데 필요한 케라스 함수를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 필요한 라이브러리를 불러옵니다.
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)

# 불러온 데이터를 적용합니다.
Data_set = np.loadtxt("./dataset/ThoraricSurgery.csv", delimiter=",")


# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장합니다.
#X = Data_set[:,0:17]
X = Data_set[:,7:10]
Y = Data_set[:,17]
print(Data_set.shape)
print(X.shape)
print(X.shape[1])

# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=X.shape[1], activation='relu'))
model.add(Dense(1, activation='sigmoid'))


print(model.summary())

# 딥러닝을 실행합니다.

# # SGD
# model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.SGD(lr=0.1), metrics=['acc'])
# history=model.fit(X, Y, epochs=30, batch_size=10)
# y_loss = history.history['loss']
# x_len = np.arange(len(y_loss))
# plt.plot(x_len, y_loss, marker='.', c='red', label="SGD")

# # Momentum
# model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.SGD(lr=0.1, momentum=0.9), metrics=['acc'])
# history=model.fit(X, Y, epochs=30, batch_size=10)
# y_loss = history.history['loss']
# x_len = np.arange(len(y_loss))
# plt.plot(x_len, y_loss, marker='.', c='orange', label="Momentum")

# # NAG
# model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.SGD(lr=0.1, momentum=0.9, nesterov=True), metrics=['acc'])
# history=model.fit(X, Y, epochs=30, batch_size=10)
# y_loss = history.history['loss']
# x_len = np.arange(len(y_loss))
# plt.plot(x_len, y_loss, marker='.', c='yellow', label="NAG")

# # Adagrad
# model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6), metrics=['acc'])
# history=model.fit(X, Y, epochs=30, batch_size=10)
# y_loss = history.history['loss']
# x_len = np.arange(len(y_loss))
# plt.plot(x_len, y_loss, marker='.', c='green', label="Adagrad")

# # RMSprop
# model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0), metrics=['acc'])
# history=model.fit(X, Y, epochs=30, batch_size=10)
# y_loss = history.history['loss']
# x_len = np.arange(len(y_loss))
# plt.plot(x_len, y_loss, marker='.', c='blue', label="RMSprop")

# Adam
model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0), metrics=['acc'])
history=model.fit(X, Y, epochs=30, batch_size=10)
y_loss = history.history['loss']
x_len = np.arange(len(y_loss))
plt.plot(x_len, y_loss, marker='.', c='purple', label="Adam")

plt.legend(loc="upper right")
plt.show()

LOSS plot

SGD, momentum SGDmomentum


nesterov, adagrad nesterovAdagrad


RMSprop, adam RMSpropAdam


LOSS PLOT 전체 비교 totalLossplot



Batch size 별 성능 비교

Batch size 1, 10 batch1

Batch size 30, 50 batch2

Batch size 80, 100 batch3

Batch size batch4

Repository 설정

Repository에서 설정에 들어간다. setting


Collaborators 탭에서 Manage access -> Add people 진행한다. Collaborators


Repository로 돌아와서 각 Branche를 생성해준다. branche




Git(GitBash)

터미널(윈도우는 GitBash)에서 Clone해온다.

git clone https://github.com/wnsgur9137/testRepository.git

gitClone


Branche를 설정해준다.

git checkout -b [branche]

gitCheckout


git pull origin main
[수정 후]
git add *
git commit -m "~~"
git push origin wnsgur9137