오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Data Analysis and ML, DL/Tensorflow

Colab에서 Tensorboard 사용하기

junha6316 2020. 11. 15. 16:33

프로젝트를 하면서 텐서보드를 사용할 일이 있었는데 구글에는 온통 케라스를 이용한 텐서보드밖에 없었다.

 

내가 필요한건 케라스가 아니라 텐서플로우로 구현한 Lasso와 Ridge였다. 직접해보고 적는 코랩으로 텐서플로우만을 이용한 텐서보드 사용하기

 

tensorflow session을 이용해서 tensorboard를 사용하려면 4가지만 기억하자

 

1. 초기화(tf.reset_default_graph())

2. 텐서보드에서 볼 변수들을 정한다. A_summary = tf.summary.scalar(name, 변수)

3. 묶어준다.

4. 학습을 진행하면서 기록해준다.

 

 

 

merge = tf.

 

 

 

import tensorflow.compat.v1 as tf
from tensorflow.python.framework import ops


def regulRegresor(y, X, RegType, Rconst,Lconst):

  tf.reset_default_graph()
  regression_type = RegType # LASSO, Ridge
  num_cols = X.shape[1]

  x_data = tf.placeholder(shape=[None, num_cols], dtype=tf.float32, name="Input")
  y_target = tf.placeholder(shape=[None,1],dtype=tf.float32, name='Output')

  A = tf.Variable(tf.random_normal(shape=[num_cols,1]),name='Weight') # Weight Vector
  b = tf.Variable(tf.random_normal(shape=[1, 1]), name='Bias') # bias Vector

  with tf.Session() as sess:
      writer = tf.summary.FileWriter(f'./log1/L{Lconst}', sess.graph)
      fomula = tf.add(tf.matmul(x_data,A), b, name ='predVal')

      if regression_type == 'LASSO':
          lasso_params = tf.constant(Lconst, dtype=tf.float32) # limit slope
          heavyside_step = tf.truediv(1., tf.add(tf.exp(tf.multiply(tf.subtract(A, lasso_params), -50)), 1))
          regularization = tf.multiply(99., heavyside_step)
          loss = tf.add(tf.reduce_mean(tf.square(y_target-fomula)), regularization)
          print(loss.shape)
          Laso = tf.summary.scalar('lasso_params', lasso_params)
          
      elif regression_type == 'Ridge':
          ridge_params = tf.constant(Rconst, dtype=tf.float32)
          ridge_loss = tf.reduce_mean(tf.square(A))
          loss = tf.expand_dims(tf.add(tf.reduce_mean(tf.square(y_target-fomula)), tf.multiply(ridge_params, ridge_loss)), 0) 
          RidParm=tf.summary.scalar('ridge_params', ridge_params)
       
      
      loss_summary = tf.summary.scalar('loss', loss[0])


      opt = tf.train.GradientDescentOptimizer(learning_rate=0.00000001)
      train_step = opt.minimize(loss) #optimizer를 이용해 loss값을 최소화 시키는 A, b를 찾는다.

      saver = tf.train.Saver()

      init = tf.global_variables_initializer()
      init.run()

      loss_vec = []
      preloss =0
      global_num =0
      merge = tf.summary.merge([loss_summary,Laso])
      for i in range(1000):
          rnd_idx = np.random.choice(len(X), size = 250000)
          rnd_x = X.iloc[rnd_idx].values.reshape(-1,num_cols)
          rnd_y = y_return.iloc[rnd_idx].values.reshape(-1,1)
          print(rnd_y.shape)
          my_dict = {x_data:rnd_x, y_target:rnd_y}
          sess.run(train_step, feed_dict=my_dict)
          temp_loss = sess.run(loss, feed_dict=my_dict)
          loss_vec.append(temp_loss[0])
          if abs(preloss - temp_loss[0]) <= 0.001:break
          else:preloss = temp_loss[0]
          summary = sess.run(merge,feed_dict={y_target : rnd_y, x_data:rnd_x, A:A.eval(), b: b.eval()})
          writer.add_summary(summary, global_num)
          global_num +=1

          if i % 10 == 0:
            print('step={}: A={}, b={}, Loss={}'.format(i+1, A.eval().reshape(1,num_cols), b.eval(), temp_loss))

      saver.save(sess, f'./model_L{Lconst}.ckpt') 
      slope = A.eval()
      cept = b.eval()
      sess.close()
      return slope, cept, loss_vec