keras model shapes 관련 에러

조회수 305회

keras를 통해서 model을 생성한 후 fit하는 과정에서 다음과 같은 ValueError가 발생합니다.

File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1051, in train_function  *
    return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1040, in step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1030, in run_step  **
    outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 890, in train_step
    loss = self.compute_loss(x, y, y_pred, sample_weight)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 949, in compute_loss
    y, y_pred, sample_weight, regularization_losses=self.losses)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py", line 201, in __call__
    loss_value = loss_obj(y_t, y_p, sample_weight=sw)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 139, in __call__
    losses = call_fn(y_true, y_pred)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 243, in call  **
    return ag_fn(y_true, y_pred, **self._fn_kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 1788, in categorical_crossentropy
    y_true, y_pred, from_logits=from_logits, axis=axis)
File "/usr/local/lib/python3.7/dist-packages/keras/backend.py", line 5119, in categorical_crossentropy
    target.shape.assert_is_compatible_with(output.shape)

ValueError: Shapes (None, 1) and (None, 93) are incompatible

train data shape은 현재 (1816, 432)이고 label data shape은 (1816, )이며 매일 업데이트 되어 새로운 데이터가 추가됩니다. label data 값은 -1~1사이의 소수4째자리 수가 나올 수 있지만 현재 데이터에는 모든 경우가 사용되지는 않고 있습니다.

위와 같은 데이터를 가지고 아래의 모델을 학습시킬 때 에러가 발생하였습니다.

def build_model(trainX, label):
  model = models.Sequential()
  model.add(layers.Dense(432, activation='relu', input_shape=(432, )))
  model.add(layers.Dense(144, activation='relu'))
  model.add(layers.Dense(144, activation='relu'))
  model.add(layers.Dense(len(set(label)), activation='softmax'))
  model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[tf.keras.metrics.CategoricalAccuracy()])
  return model

model의 마지막 layer는 현재 label이 모든 경우의 수를 사용하고 있지 않기 때문에 label에 따라 유동적으로 조절될 수 있도록 작성하였습니다.

에러 문구를 보면 layers의 모양을 fit할 때 에러가 발생되는 것으로 추정되는데 이유와 해결방안을 모르겠습니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)