딥러닝 - 10

CYSSSSSSSSS·2023년 9월 7일
0

딥러닝

목록 보기
10/12

class model

import tensorflow as tf
class MyModel(tf.keras.Model): 
  def __init__(self, **kwargs): 
    super(MyModel, self).__init__(**kwargs)
    self.dense1 = tf.keras.layers.Dense(2 , activation = 'swish') 
    self.dense2 = tf.keras.layers.Dense(1) 
  def call(self, x):
    h = self.dense1(x) 
    y = self.dense2(h)
    return y 
model = MyModel() # model.compile(loss="mse") model.compile(loss='mse')
model.compile(loss='mse')

model(독립.values) # fit . predict 를 하면 자동으로 실행 
  • fit 함수 내에 call 로직을 수행하는데 커스터 마이징을 통해 model 에 구조를 작성
  • 따라서 히든 레이어 만들때는 call 함수 안에서 만들어야 한다.
  • keras.model 을 만들려면 상속을 받아야 한다 무조건 !
  • init 을 할떄 layer들에 기본적인 구조 input shape , activation 을 설정해야 한다.
  • 상속을 받을때 **kwargs 을 쓰는데 packing/unpacking 기법이라고 부른다.
  • **kwargs dict 형태를 key 를 받을떄 value를 리턴해주는것이다.

packing / unpacking

packing = 한 변수에 여러 개의 데이터를 할당하여, 여러개의 객체를 하나의 객체로 합쳐주는 것

unpacking = 패킹과 반대되는 개념으로, 한 변수의 데이터를 각각의 변수로 반환하는 것

a = [1,2,3,4]
print(a)
b,c,d,e = [1,2,3,4]
b,*c = [1,2,3,4] # packing * 을 사용하면 나머지 데이터를 전부 가진다
print(b,c)
d = [*a , 5 , 6] # unpacking 리스트 안에 unpacking 을 하면 해당 데이터를 추가한다.
print(d)
a = {'a':1 , 'b':2,'c':3}
print(a)
b = {**a , 'd':4,'e':5}
print(b)

a,**b = {"a":1 , "b":2 , "c":3} # dict 는 packing 은 안된다
print(a,b)

data = [[**d , "aivler":True] for d in data] # 파이썬에서 dict unpacking 기법
  • dict 데이터 는 분배 기준이 애매하기 떄문에 packing 이 안된다.
# 함수 unpacking
def add(a,b,c):
  return a,b,c

d = [1,2,3]
print(add(*d)) # unpacking 을 통해서 보낼수 있다.
d = {"a" : 1 , "c": 3 , "b": 2}
print(add(**d)) # unpacking

def add(*a):
  print(a)
  return sum(a)


실습


import tensorflow as tf
class MyModel(tf.keras.Model):
  def __init__(self,**kwargs):
    super(MyModel , self).__init__(**kwargs)
    self.flatten = tf.keras.layers.Flatten()
    self.dense1 = tf.keras.layers.Dense(64 , activation = 'swish')
    self.bn1 = tf.keras.layers.BatchNormalization()
    self.dense2 = tf.keras.layers.Dense(20 , activation = 'swish')
    self.bn2 = tf.keras.layers.BatchNormalization()
    self.dense3 = tf.keras.layers.Dense(10 , activation = 'softmax')
  def call(self,x):
    h = self.flatten(x)
    h = self.dense1(h)
    h = self.bn1(h)
    h = self.dense2(h)
    h = self.bn2(h)
    y = self.dense3(h)
    return y
    
    model = MyModel()
model.compile(loss='sparse_categorical_crossentropy' , metrics = 'accuracy')
model.build(input_shape = [28,28]) # input shape 을 지정해주는 부분 

profile
개발자 되고 싶어요

0개의 댓글