inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

딥러닝 CNN 완벽 가이드 - TFKeras 버전

Numpy array와 Tensor 차이, 그리고 fit() 메소드 상세 설명

안녕하세요 교수님. fit()과 모델 생성할때 input 질문있습니다.

339

홍성민

작성한 질문수 16

0

안녕하세요 교수님.

model을 생성할때는 입력값을 만약 2차원 gray scale (크기 = 28 28)이 들어왔다면 tensor값을 받아야하니 이것을 3차원(1 28 * 28)으로 받는것을 이해했습니다.

만약 RGB 이미지라면 (크기 : 28 28 3 )이 값을 그대로 받는건가요?? channel값은 임의의로 정했습니다.

그렇다면 fit()함수는 x값과 y값은 numpy로 받는데 이 값을 numpy에서 tensor값으로 변경시켜주지않고 받는것일까요??

 

궁금합니다

머신러닝 딥러닝 keras tensorflow kaggle cnn

답변 1

0

권 철민

안녕하십니까,

  1. model을 생성할때는 입력값을 만약 2차원 gray scale (크기 = 28 28)이 들어왔다면 tensor값을 받아야하니 이것을 3차원(1 28 * 28)으로 받는것을 이해했습니다.

    => 음, tensor 값을 받아야 해서 3차원으로 받는 것은 아닙니다.

    이미지 데이터의 차원과 관계없이 Dense Layer 기반으로 모델을 설정할 경우 Dense Layer의 입력값은 배치(Batch)를 제외하면 1차원 값이 들어와야 합니다. 그러니까 (28, 28) 2차원 shape 이미지 데이터는 784 원소를 가지는 1차원 데이터 값이 되어야 Dense Layer로 입력할 수 있는데, Dense Layer는 반드시 배치 데이터를 감안해서 입력을 받기 때문에 배치 사이즈를 32로 한다면 32개의 이미지 데이터를 2차원으로 만들어서 입력을 해줘야 합니다. 즉 (32, 784)로 입력이 됩니다. 하지만 Batch size로 2차원 데이터를 만드는 것은 Keras 모델에서 자동으로 해주게 되므로 관여할 필요가 없습니다.

tr_images의 shape는 (51000, 28, 28)입니다. 즉 51000개의 28x28 2차원 이미지를 가지고 있는 전체적으로 3차원 데이터 입니다. 모델에 입력할 때 맨 앞의 차원은 batch에서 활용합니다. 따라서 fit()메소드에 입력될 때는 흑백 이미지 데이터는 갯수를 감안해서 3차원, rgb 컬러 이미지는 4차원을 입력해 줍니다.

모델에서는 맨 앞의 차원을 이미지의 갯수로 가정하므로 이를 batch로 생각합니다. 따라서 모델의 처리에 사용되는 데이터는 기본적으로 맨 앞 차원을 제거합니다. 그래서 create_model() 함수의 맨 처음의 Input Layer가 바로 2차원이 됩니다( 흑백 이미지의 경우).

근데 중요한 것은 Dense Layer는 무조건 1차원 데이터(배치를 제외하고)를 입력으로 받습니다. 때문에 Input Layer 다음에 Flatten Layer를 2차원 데이터를 1차원으로 만듭니다.

컬러 이미지 일때도 비슷합니다. 배치를 제외한 3차원 데이터를 모델에서 입력 받기 위해 Input shape는 3차원이 되어야 합니다. 하지만 Dense Layer를 사용한다면 무조건 1차원이 되어야 하므로 Flatten을 적용해서 1차원으로 만들어 줍니다.

이렇게 Dense Layer를 1차원으로 기존 데이터를 뭉개 버리기 때문에 원본 데이터의 특성을 살리지 못하는 모델이 만들어 지기 쉽니다.

이후 강의에서는 CNN 을 통해서 3차원 데이터를 그대로 처리하는 방식을 배우시게 될 겁니다.

  1. 그렇다면 fit()함수는 x값과 y값은 numpy로 받는데 이 값을 numpy에서 tensor값으로 변경시켜주지않고 받는것일까요??

    => fit() 메소드는 numpy값을 입력 받을 수도 있고, tensor값을 입력 받을 수도 있습니다. 하지만 모델에 입력될 때는 반드시 Tensor로 입력되어야 하므로 fit()은 numpy값을 입력 받으면 모델에 적용시 자동으로 Tensor로 변환합니다.

감사합니다.

resize 질문

0

51

1

20251212 Kaggle 런타임에 scikit-learn 설치 실패 트러블 슈팅

0

76

1

Loss와 매트릭 관계

0

62

2

Boston 코랩 실습

0

164

2

배치 정규화의 이해와 적용 2 강의 질문

0

136

2

Augmentation원본에 적용해서 데이터 갯수 자체를 늘리는 행위는 의미가있나요?

0

145

2

Conv함수 안에 activation 을 넣지 않는 이유가 뭔지 궁금합니다.

0

206

2

소프트맥스 관련 질문입니다

0

208

1

강의 관련 질문입니다

0

151

2

residual block과 identity block의 차이

0

190

2

옵티마이저와 경사하강법의 차이가 궁금합니다.

1

240

1

실습 환경

0

165

2

입력 이미지 크기

0

244

2

데이터 증강

0

196

2

albumentations ShiftScaleRotate

0

207

1

Model Input Size 관련

0

281

1

마지막에 bird -> frog 말고도 deer -> frog 도 잘못된것 아닌가요??

0

204

1

일반적인 질문 (kaggle notebook사용)

0

272

2

실무에서 Augmentation 적용 시

0

338

2

안녕하세요 교수님

0

231

1

가중치 초기화(Weight Initialization) 질문입니다.

0

327

1

테스트 데이터셋 predict의 'NoneType' object has no attribute 'shape' 오류

0

409

1

학습이 이상하게 됩니다.

2

1036

2

boston import가 안됩니다

0

229

1