본문 바로가기
First step/AI 기초반

[TIL]21.07.12Keras 1일차

by Joshua21 2021. 7. 12.

#예제 

 

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense

import numpy as np

import tensorflow as tf

 

seed=0

np.random.seed(3)

tf.random.set_seed(3)

 

Data_set=np.loadtxt("/content/drive/MyDrive/Colab Notebooks/dataset/ThoraricSurgery.csv",delimiter=",")

 

X=Data_set[:,0:17]

Y=Data_set[:,17]

 

model= Sequential()

model.add(Dense(30, input_dim=17,activation='sigmoid'))

model.add(Dense(1,activation = 'sigmoid'))

model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

model.fit(X,Y,epochs=30,batch_size=10)

 

print('\n Accuracy: %.4f'%(model.evaluate(X,Y)[1]))

 

 

keras는 거의 모든 종류의딥러닝 모델의 프로토타입을 빠르게 만들수 있음
(컴퓨터비전을 위한)cnn 시퀀스처리를위한 rnn 을 지원하며 이둘을 자유롭게 조합하여 사용가능

딥러닝의 모델을 설정하고 구동하는 부분은 모두 modl 이라는 함수를 선언하며 시작
모델을 정희하는 방법은 2가지 인데 sequrntial 클래스(가장 자주사용하는 구조인 층을 순서대로 쌓아 올린 네트워크) 또는 함수형 api

#예제 시그모이드 

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Activation, Dense

import numpy as np

from tensorflow.keras import optimizers

import tensorflow as tf

 

seed=0

np.random.seed(0)

tf.random.set_seed(0)

 

training_data =np.array([[0,0],[0,1],[1,0],[1,1]] ,'float32')

target_data=np.array([[0],[1],[1],[0]] ,'float32')

 

model= Sequential()

 

#노드 4개 2는 x데이터 갯수

model.add(Dense(4, input_dim=2,activation='sigmoid'))

model.add(Dense(1,activation = 'sigmoid'))




model.compile(loss='binary_crossentropy',optimizer=optimizers.Adam(lr=0.1),metrics=['accuracy'])

 

model.fit(training_data,target_data,epochs=50,verbose=2)

 

print(model.predict(training_data))

print('\n Accuracy: %.4f'%(model.evaluate(training_data ,target_data)[1]))



 

#선형회귀 데이터 케라스로 학습하고 그래프 표현하기

import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Activation, Dense

from tensorflow.keras.optimizers import RMSprop

from mpl_toolkits.mplot3d import Axes3D

 

raw_data=np.loadtxt("/content/drive/MyDrive/Colab Notebooks/dataset/Blood_fat.csv",delimiter=",")

 

xs=np.array(raw_data[:,0], dtype=np.float32)

ys=np.array(raw_data[:,1], dtype=np.float32)

zs=np.array(raw_data[:,2], dtype=np.float32)

 

x_data=np.array(raw_data[:,0:2], dtype=np.float32)

y_data=np.array(raw_data[:,2], dtype=np.float32)

y_data=y_data.reshape((25,1))

 

rmsproop=RMSprop(lr=0.01)

 

model= Sequential()

#히든레이어 없이 입력

model.add(Dense(1,input_shape = (2,)))

model.compile(loss='mse',optimizer=rmsproop)

model.summary()



hist=model.fit(x_data,y_data,epochs=1000)

 

print(hist.history.keys())

print('100KG, 40세 혈중지방함량치=',model.predict(np.array([100,40]).reshape(1,2)))

print('60KG, 25세 혈중지방함량치=',model.predict(np.array([60,25]).reshape(1,2)))

 

W_,b_=model.get_weights()

#x=np.linspace(start,stop,num).start 배열이시작,끝 값 num은 시작과 끝사이의간격

#num을 생략하면 디폴트로 50개의 수열, 즉 1차원 배열을 만들어 줍니다

 

#20~100까지 50개를 만듦

x=np.linspace(20,100,50).reshape(50,1)

 

y=np.linspace(10,70,50).reshape(50,1)

#10~70 까지 50개를 만듦

 

print('x=',x.shape)

print('y=',y.shape)

 

#numpy 배열들을 하나로 합치는데 이용

#나이와 몸무게를 하나의 2차원 배열로 만듦

X=np.concatenate((x,y),axis=1)

print('X=',X.shape)

 

#예측치

Z=np.matmul(X,W_)+b_

 

fig=plt.figure(figsize=(12,12))

ax=fig.add_subplot(111,projection='3d')

 

#예측 데이터

ax.scatter(x,y,Z)



#실제 데이터

ax.scatter(xs,ys,zs)

ax.set_xlabel('Weight')

ax.set_ylabel('Age')

ax.set_zlabel('Bllod Fat')

ax.view_init(15,15)

plt.show()

 

#실습하기 인터넷에서 데이터셋을 구해서 실습하기로 했고

나는 서울 자전거의 그날  기온, 시계에 따른 대여횟수를 선형데이터로 보고 학습했다

import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Activation, Dense

from tensorflow.keras.optimizers import RMSprop

from mpl_toolkits.mplot3d import Axes3D

 

raw_data=np.loadtxt("/content/drive/MyDrive/Colab Notebooks/dataset/SeoulBikeData.csv",delimiter=",")



xs=np.array(raw_data[:,1], dtype=np.float32) #온도

ys=np.array(raw_data[:,2], dtype=np.float32) #시계

zs=np.array(raw_data[:,0], dtype=np.float32) #총 대여시간

 

x_data=np.array(raw_data[:,1:], dtype=np.float32)

y_data=np.array(raw_data[:,0], dtype=np.float32)

y_data=y_data.reshape((8760,1))

 

rmsproop=RMSprop(lr=0.01)

 

model= Sequential()

model.add(Dense(1,input_shape = (2,)))

model.compile(loss='mse',optimizer=rmsproop)

model.summary()



hist=model.fit(x_data,y_data,epochs=100)

 

print(hist.history.keys())

W_,b_=model.get_weights()




x=np.linspace(-50,100,100).reshape(100,1)#온도

 

y=np.linspace(0,2000,100).reshape(100,1# 시계

 

print('x=',x.shape)

print('y=',y.shape)



X=np.concatenate((x,y),axis=1)

print('X=',X.shape)

 

#예측치

Z=np.matmul(X,W_)+b_

 

print('W는',W_)

print('b는',b_)

 

fig=plt.figure(figsize=(12,12))

ax=fig.add_subplot(111,projection='3d')

 

#예측 데이터

ax.scatter(x,y,Z)



#실제 데이터

ax.scatter(xs,ys,zs)

ax.set_xlabel('Temperature')

ax.set_ylabel('Visibility')

ax.set_zlabel('Rented Bike count')

ax.view_init(15,15)

plt.show()