인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

time2605님의 프로필 이미지
time2605

작성한 질문수

딥러닝 CNN 완벽 가이드 - Fundamental 편

캐스팅 오류 질문드립니다.

작성

·

274

0

안녕하세요. cnn 코드 작성중에 오류가 발생하는데 도저히 해결을 할 수가 없어서 글 남깁니다...

원래 동일 코드로 잘 작동하던 모델을 다시 트레이닝 시키려고 하는데 해당 오류가 발생하고, 이유를 알 수가 없습니다.. 잘 작동했었던 것에서 오류가 발생해서.. 매우 당황스럽네요..

구글링 결과로는 label에 string타입이 끼어있는것 같은데 for문으로 하나씩 데이터타입을 확인해봤는데 전부 int타입입니다.. (df자체를 확인한거라서 train, test는 df에서 쪼개집니다..)

cnn모델은 sparse categorical을 사용해서 원핫인코딩이 아닌 0,1,2,3... 과 같은 정수타입의 classification 정답이 labeling된 상태입니다.

해당 에러 코드는 다음과 같습니다..

Cast string to float is not supported
	 [[node Cast (defined at <ipython-input-51-4dfcf5575766>:48) ]] [Op:__inference_train_function_190019]

Function call stack:
train_function

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

전체 코드와 데이터세트를 제가 접근할수 있게 코랩으로 만들어서 url 알려 주시면 봐드리겠습니다. 

time2605님의 프로필 이미지
time2605
질문자

선생님,

트레이닝 데이터셋에 값을 3개를 넣어서 문제였나보네요. 2개로 줄이니까 제대로 작동합니다ㅠㅠ

이미지, 레이블, 그리고 추가로 제가 필요한 image_path값들을 트레이닝에 페어로 넣고 트레이닝을 시켰었는데, 3번째를 빼니 제대로 작동을 하네요. 보름전에 똑같은 코드로는 작동이 되었었는데, 알다가도 모를 파이썬 세계네요... 

코드에는 문제가 없고 트레이닝 배치에 문제가 있었네요.. 신경써주셔서 감사합니다.

권 철민님의 프로필 이미지
권 철민
지식공유자

해결되었다니 다행입니다

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

전체 데이터를 까보지 않는 이상, 해당 오류만 가지고 답을 드리기는 어렵지만,, 

오류 내용대로 label에 string 값이 되어 있는 것 같습니다. 

dataframe.info()로 해당 label 컬럼이 int 형인지 확인해 주십시요. 만약 object이면 중간에 string이 있는 것입니다. 

다른 방법으로는 해당 label 컬럼을 numpy array로 생성한 뒤에 해당 numpy array의 type이 int 형으로 되는지 확인해 주십시요. 

위 방법 수행후에 다시 내용 업데이트 부탁드립니다. 

time2605님의 프로필 이미지
time2605
질문자

안녕하세요 답변감사합니다

해당 컬럼타입 확인을해보면 int이고 for loop로 하나씩 type을 확인해서 int인지 아닌지 전부 확인해보았지만... 모두 int타입이네요ㅠㅠ... 그런데 저런 오류가 발생해서.... 

제가 해당 컬럼에 데이터를 만든 방식은

class라는 컬럼에 있는 string과 (ex. 'a', 'a', 'b','b', 'c',...) list_path에 해당 string의 인덱스('a','b','c')를 확인해서 순서를 assign해주는 방식으로 작업하였습니다. 예와 같은 경우는 0,0,1,1,2...

df['class_category'] = 0

for i in range(len(df)):

    temp = df['class'][i]

    for j in range(len(list_path)):

        if temp == list_path[j]:

            df['class_category'][i] = j

권 철민님의 프로필 이미지
권 철민
지식공유자

class_category = df['class_category'].to_numpy()

print(class_category.dtype) 수행시 int64가 나오는 건가요?

time2605님의 프로필 이미지
time2605
질문자

네 선생님께서 올려주신 코드를 작성하면 int64가 나옵니다..

time2605님의 프로필 이미지
time2605
질문자

df.dtype을 해보았을때에 

class_category     int64
로 확인되고,
time2605님의 프로필 이미지
time2605

작성한 질문수

질문하기