딥러닝중 `logits` and `labels` must have the same shape, received 에러

조회수 4958회

import pandas as pd
import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

df = pd.read_csv('C:\\Users\\operator09\\PycharmProjects\\pythonProject\\TEST\\data\\clothsize.csv')

df['age'] = df['age'].fillna(df['age'].median())
df['height'] = df['height'].fillna(df['height'].median())

df['size'] = df['size'].map({'M': 0, 'S': 1, 'XXXL': 2, 'XL': 3, 'L': 4, 'XXS': 5, 'XXL': 6})

x = df.drop("size", axis=1)
y = df['size']

model = tf.keras.models.Sequential([tf.keras.layers.Dense(64, activation='relu'),
                                    tf.keras.layers.Dense(128, activation='relu'),
                                    tf.keras.layers.Dense(1028, activation='relu'),
                                    tf.keras.layers.Dropout(0.2),
                                    tf.keras.layers.Dense(64, activation='relu'),
                                    tf.keras.layers.Dense(6, activation='softmax')
                                    ])
opt = tf.keras.optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x, y, epochs=1000)

몸무게, 키, 나이를 받아서 사이즈를 예상해주는 프로그램 만드는걸 연습하고 있는데 실행중에 ValueError: logits and labels must have the same shape, received ((None, 6) vs (None, 1)). 라는 에러가 뜨네요 어떻게 해야하나요??

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 케라스 모델의 마지막층에서 6개의 아웃풋으로 끝나잖아요. 그런데, 레이블은 size 수치 1개짜리입니다. 그래서 shape 이 맞지 않는다는 에러가 발생한 것으로 보입니다.


    답변 추가합니다.

    분류문제네요. 네트워크를 고치는 게 아니라, 입력의 타겟 y 를 one-hot 형태로 바꾸어야 할 겁니다. 0부터 6까지 7가지 클래스가 있으니까 네트워크 말단도 7개의 아웃풋이 되어야 하고요.

    수고하세요.

    • 감사합니다. y를 원핫코딩한후 출력층을 8로 바꾸니 작동하네요. 근데 왜 7개가 아닌 8인지... 알 수 없는 사용자 2021.12.10 17:46
    • @operator09 : "왜"를 확인하는 방법을 찾아내고 확인하세요. 일단 y.shape 을 확인해 보면 되겠네요. nowp 2021.12.11 10:05

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

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

(ಠ_ಠ)
(ಠ‿ಠ)