순서
- 모델생성
- model.add(출력, Dense(출력층, 활성화 함수relu, 입력shape)) 모델층 쌓기
- model.summary()
- model.compile(옵티마이저, 손실함수, 지표)
model = Sequential()
model.add(Dense(32, activation='relu', input_shape=(3,)))
model.add(Dropout(0.1)) #드롭out이라서 출력값이 0출력
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.1)) #드롭out이라서 출력값이 0출력
model.add(Dense(1, activation='sigmoid'))
model.summary()
history = model.fit(tr, tr_lable, validation_data=(ts,ts_lable), batch_size=30, epochs=200, verbose=2)
history_dict = history.history
loss_values = history_dict['loss']
val_loss_values = history_dict['val_loss']
acc = history_dict['accuracy']
pred = model.predict(ts).reshape(ts.shape[0])
pred = np.where(pred > 0.5, 1, 0)
accuracy = 1- ( np.where((pred - ts_lable) == 0, 0, 1).sum()/len(ts_lable))
# 시각화
plt.plot(loss_values)
plt.plot(val_loss_values)
plt.xlabel("epoch")
plt.ylabel('loss')
plt.legend(['train error', 'test error'], loc = 'upper left')
plt.show()
model.summary()
![]()
시각화 결과
![]()
x = np.array(
[ [157,55],
[163,60],
[165,65],
[170,76],
[175,79],
[180,80]] )
y = np.array( [0,0,0,1,1,1] ) #성별예측
# 퍼셉트론 모델 학습
clf = Perceptron()
clf.fit(x,y)
# 시각화
plt.scatter(x[:, 0],x[:,1])
plt.plot(x[:,0],x[:,1], color = 'red')
plt.show()
# 예측처리
predicted = clf.predict(x[:])
predicted
woman = clf.predict( [[162,57] ])
print('[162,57] 대상은 ', woman)
man = clf.predict( [[174,76] ])
print('[174,76] 대상은 ', man)
시각화 결과
출력 결과
[162,57] 대상은 [0][174,76] 대상은 [1]
활성화 함수 종류
함수 이름 수식/정의 출력 범위 특징 및 용도 계단 함수 f(x) = 1 if x > 0 else 0 {0, 1} 이진 분류 개념에서 사용. 신경망 학습에는 사용 X (미분 불가) 시그모이드 f(x) = 1 / (1 + e-x) (0, 1) 출력값을 확률처럼 사용. 이진 분류 출력층에서 사용. 기울기 소실 문제 있음 ReLU f(x) = max(0, x) [0, ∞) 계산 빠르고 대부분의 은닉층에서 기본적으로 사용. 음수 입력은 0 출력 Tanh f(x) = (ex - e-x) / (ex + e-x) (-1, 1) 시그모이드보다 중심이 0이라 학습이 더 안정적. 은닉층에 사용됨 Softmax f(xi) = exp(xi) / Σexp(xj) (0, 1), 합=1 다중 분류 출력층에서 사용. 각 클래스 확률을 출력하며 합은 1이 됨
식
def step(x):
y = x > 0
return y
# 계단함수 그래프 시각화
x = np.arange(-5.0, 5.0, 0.1)
y = step(x)
plt.plot(x,y)
plt.plot([0,0], [1.0, 0.0], ':')
plt.title('step 그래프')
plt.show()
식
def sigmoid(x): # S자 형태 그래프, 미분이 가능
y = 1.0/(1.0 + np.exp(-x))
return y
# 시그모이드 그래프 시각화
y = sigmoid(x)
plt.plot(x,y)
plt.plot([0,0], [1.0, 0.0], ':')
plt.title('sigmoid 그래프')
plt.show()
식
def relu(x):
return np.maximum(x,0)
# Relu 그래프 시각화
y = relu(x)
plt.plot(x,y)
plt.plot([0,0], [5.0, 0.0], ':')
plt.title('relu 그래프')
plt.show()
def tanh(x):
return np.tanh(x)
# tanh 그래프 시각화
y = tanh(x)
plt.plot(x,y)
plt.plot([0,0], [1.0, -1.0], ':')
plt.title('tanh 그래프')
plt.show()
def softmax(x):
y = np.exp(x)/np.sum(np.exp(x))
return y
#softmax 그래프 시각화
y = softmax(x)
plt.plot(x,y)
plt.title('softmax 그래프')
plt.show()