keras model shapes 관련 에러
조회수 181회
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할 때 에러가 발생되는 것으로 추정되는데 이유와 해결방안을 모르겠습니다.
댓글 입력