본문 바로가기
CS/삽질로그

[keras] TypeError: Inputs to a layer should be tensors. 오류 해결

by judy@ 2023. 4. 14.

오류 발생

AutoRec 구현을 위해 모델을 구성하고 있는데, 모델을 instanciation 하니 다음과 같은 에러가 발생했다.

...

    # inputs
    inputs = tf.keras.layers.InputLayer(
        input_shape=input_size, name='input', dtype='float32')
    
...
TypeError: Inputs to a layer should be tensors.

오류 해결

keras 로 모델 구성 시 첫번째 레이어는 텐서로 구성해야 하는 것 같아서 다음과 같이 수정하였더니 동작하였다.

...

    # inputs
    inputs = tf.keras.Input(
        shape=input_size, name='input', dtype='float32')
    
...

오류의 원인은 무엇일까? 둘의 근본적인 차이는 무엇인데, 바꾸면 오류가 발생하지 않는 것일까? GPT에 물어봤다.

 

keras에서 Input과 InputLayer의 차이가 뭐고, 함수 기반의 모델을 생성할 때에는 둘을 사용하면 돼?
Keras는 딥 러닝 모델을 구축하기 위한 인기있는 딥 러닝 프레임워크 중 하나입니다.
Keras에서 Input과 InputLayer는 모델의 입력을 정의하기 위해 사용되는 두 가지 다른 개념입니다.

1. Input: Keras의 Input은 모델의 입력 데이터의 형태와 크기를 정의하는 클래스입니다. 모델의 입력 데이터의 특성에 대한 정보를 제공하여 모델의 첫 번째 레이어로 사용됩니다. 예를 들어, 이미지 분류 모델을 구축할 때, 입력 이미지의 크기와 채널 수를 정의하는 Input을 사용할 수 있습니다. Input은 모델의 첫 번째 레이어로 사용되므로, 모델의 입력 데이터의 형태를 정확하게 정의해야 합니다.

2. InputLayer: Keras의 InputLayer는 모델의 첫 번째 레이어로 사용되는 레이어를 정의하는 클래스입니다. InputLayer는 모델의 입력 데이터를 받아들이는 역할을 수행합니다. InputLayer는 Input 클래스의 인스턴스를 받아서 모델의 첫 번째 레이어로 추가됩니다. InputLayer는 모델의 첫 번째 레이어로 사용되므로, 모델의 입력 데이터를 정확하게 처리할 수 있는 레이어를 선택해야 합니다.

함수 기반의 모델을 생성할 때에는 보통 InputLayer 대신 Input을 사용합니다. Input을 사용하면 모델의 입력 데이터의 형태와 크기를 더 명확하게 정의할 수 있기 때문입니다. 예를 들어, 다음과 같이 함수 기반의 모델을 생성할 수 있습니다

: python Copy code

from keras.layers import Input, Dense
from keras.models import Model

# Input 정의
input_shape = (28, 28)
inputs = Input(shape=input_shape)

# 모델 레이어 정의
x = Dense(128, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
outputs = Dense(10, activation='softmax')(x)

# Model 객체 생성
model = Model(inputs=inputs, outputs=outputs)

위의 예제에서는 Input을 사용하여 모델의 입력 데이터의 형태와 크기를 정의하고, 함수 기반의 모델을 생성하였습니다. InputLayer 대신 Input을 사용하여 모델의 입력 데이터를 정의하고, 그 다음 레이어들을 연결하여 모델을 구성하였습니다.

 

반응형