파이썬 model.fit()에서 오류 (lstm)

조회수 3547회

LSTM을 사용하여 분류 모델을 만들고 있습니다. row data는 자연어로 정수화까지 마쳤고 x_data와 y_data 모두 ndarray 타입입니다. train_test_split을 통해 train 데이터와 test 데이터로 나누고 모델링을 진행하려는데 model.fit(X_train, y_train)에서 오류가 납니다. 배열 크기 차이인 것 같은데 해결 방법을 모르겠어서 질문 남깁니다.


X_train, X_test, y_train, y_test = train_test_split(padded_x, padded_y, test_size=0.2, random_state=42)
# padded_x, padded_y 는 정수화 및 벡터화를 마친 데이터

print(X_train.shape) # 376, 360
print(y_train.shape) # 376, 54

word_size = len(token.word_index) + 1

# 단어 임베딩
model = Sequential() # 레이어 구성
model.add(Embedding(word_size, 20, input_length=len(longest_sentence)))
# len(longest_sentence)) = 360

#model.add(Flatten())
model.add(LSTM(360, activation='tanh'))
model.add(Dense(1, activation='softmax'))

model.summary()
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
              metrics=[tf.keras.metrics.Accuracy()])

model.fit(X_train, y_train, batch_size=32, epochs=20)
ValueError: Shapes (None, 1) and (None, 54) are incompatible
  • y_train 이 원핫인가요? nowp 2020.12.8 10:52
  • 원핫은 아니고 array([[2056, 0, 0, ..., 0, 0, 0], [ 0, 0, 0, ..., 0, 0, 0], [2056, 108, 0, ..., 0, 0, 0], ..., [ 17, 0, 0, ..., 0, 0, 0], [ 0, 0, 0, ..., 0, 0, 0], [ 17, 0, 0, ..., 0, 0, 0]]) 이런 식으로 빈도 순으로 정수화 된 ndarray입니다 leeyunji964 2020.12.8 10:58

1 답변

  • y_train 이 원핫이고 모델의 마지막은 원핫이 아니고 그런거 같네요.

    • 원핫은 간단히 말하자면 value가 1과 0으로 이루어진 것 아닌가요? 원핫을 하면 차원이 너무 커져서 일단 row data를 빈도 수를 기준으로 해서 단어들을 정수화를 시켰고, 그 다음에 train_test_split으로 train, test data를 나누었는데..! 그리고 모델의 마지막은 원 핫이 아니다라는 게 무슨 의미인지 모르겠습니다. leeyunji964 2020.12.8 11:09
    • 마지막을 Dense(54, 로만 바꾸며 일단 에러는 없어질텐데, 분류의 y 레이블이.. 특이하네요. nowp 2020.12.8 12:02

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)