akaSonny

[TF/Keras] Custom Datagenerator로 Multiple Input 넣기 본문

Study (Programming)/Tensorflow-Keras

[TF/Keras] Custom Datagenerator로 Multiple Input 넣기

Jihyeoning 2024. 4. 11. 14:35

Custom Datagenerator로 Multiple Input 넣기 

 

오늘 깨달은점 generator로 multi input을 사용해본 적이 없었다 ..그냥 데이터를 직접 넣을 때는 model.fit(x=[x1, x2], y=y) 이런 식으로 사용하면 됐는데 generator는 어떻게 하지 ???? 에서 뇌정지

 

찾아보니 대부분 custom이 아닌 ImageGenerator 관련 방법이라 찾는데 애 좀 먹었다.

 

1. 모델 만들기

일단 다음과 같이 2개의 입력값을 가지는 모델을 생각해보자.

input1 = tf.kears.layers.Input(shape=(64, 64))
input2 = tf.kears.layers.Input(shape=(64, 64))

def network(inputs):
	x = Dense(24, activation='relu')(inputs)
    x = Dense(24, activation='relu')(x)
    return x
   
network1 = network(input1)
network2 = network(input2)
x = concatenate([network1, network2])
out = Dense(1)(x)

model = tf.keras.models.Model([input1, input2], out)

 

2. Custom Datagenerator

* 일단 기본적인 custom datagenerator 만드는 방법  !

2023.01.12 - [Study (Programming)/Tensorflow-Keras] - Keras Custom Data Generator 만들기

 

Keras Custom Data Generator 만들기

- 이미지 데이터를 훈련에서 사용할 때, 이미지를 메모리 공간에 한 번에 올려놓고 사용하면 out of memory 에러가 발생해서,, 찾아보니까 Data Generator를 사용하면 배치마다 이미지를 불러올 수 있었

star-nation-chunsik.tistory.com

 

이 코드에서 __getitem__(self)의 return에서 input 부분을 tuple 형태로 바꾸어주면 된다.

class DataGenerator(Sequence):
	def __init__(self, *kwargs):
    	...
        
    def __len__(self):
    	return ...
        
    def __getitem__(self):
    	...
        return (inp1, inp2), target

 

3. model.fit()

* generator를 쓰더라도 이제는 fit_generator가 아닌 fit 함수로 모델 훈련이 가능해졌다.

train_gen = DataGenerator(mode='train')
val_gen = DataGenerator(mode='val')

model.fit(trian_gen, validataion_data=val_ge, epochs=100, batch_size=1)

 

이런 식으로 단일 입력값과 동일하게 써주면 된다

 


Referene

https://stackoverflow.com/questions/68536630/is-it-possible-to-use-a-custom-generator-to-train-multi-input-architecture-with