Math/Numerical Analysis

[수치해석] Tensorflow 이용 기본 모델 학습

frances._.sb 2022. 2. 11. 12:03
728x90

이번에는 python에 있는 Tensorflow를 이용하여 딥러닝의 기본 모델 학습을 해볼 것이다.

 

  • 텐서플로로 표현한 선형회귀 모델
class MyModel(tf.keras.Model):
	def __init__(self, **kwargs):
    	super().__init__(**kwargs)
        self.w = tf.Variable(tf.ones([1,1]))  #기울기
        self.b = tf.Variable(tf.ones([1]))  #y절편
    
    def call(self,x): #x:데이터 x좌표
    	return tf.matmul(x,self.w) + self.b
        
        
#모델 선언 및 최적화 방법 결정

#예측 모델 설정
model = MyModel()

#수치최적화 알고리즘 설정
MaxEpoch = 25
lr = 0.25
optimizer = optimizers.SGD(lr)


#결정론적 방법

for epoch in range(MaxEpoch):
	with tf.GradientTape() as tape:
    	curr_loss = loss(y_train, model(x_train))
        gradients = tape.gradient(curr_loss, model.trainable_variables)
        if epoch % 5 == 0:
        	print(model.w.numpy(), model.b.numpy(), curr_loss.numpy())
        optimizer.apply_gradients(zip(gradients, model.trainable_variables))

#배치 사용을 안해서 전체 데이터 이용하였음.

 

 

스토캐스틱 방법을 이용하고 싶다면,

#스토캐스틱 방법
batch_size = 5
for epoch in range(MaxEpoch):

	if epoch % 5 == 0:
    curr_loss = loss(y_train, model(x_train))
    print(model.w.numpy(), model.b.numpy(), curr_loss.numpy())
    
    #이 부분이 생김
 	for x_batch, y_batch in generate_batches(batch_size, shuffled_x_train, shuffled_y_train):
    	with tf.GradientTape as tape:
        	curr_loss = loss(y_batch, model(x_batch))
            gradients = tape.gradient(curr_loss, model.trainable_variables)
            optimizer.apply_gradients(zip(gradients, model.trainable_variables))

 

 

728x90
반응형