-
글쓴이글
-
2021년 6월 8일 02:01 #10183
최헌수참가자안녕하세요,
(1) MNIST (상품)이미지에 대한 CNN모델의 predict 는 동영상 자료에 따라 확인했습니다.
ImageNet(개/고양이)에 대한 증강 CNN과 전이 CNN에 대한 predict 코드는 동영상에 없어서
아래처럼 자체적으로 작성해 봤는데 아무래도 이상합니다. (코드 및 출력 은 아래, 그림은 위)
표준 predict 예제코드를 부탁합니다.
(2) 백견이 불여일타라 일일이 타이핑은 해봅니다만, 강의동영상 자료외에 소스코드는
깃허브 등에 안올려 놓나요 ?
(3) train_ds., val_ds, test_ds는 ImageNet 개와 고양이가 각각 그림 번호순으로 64 x 313, 64 x 79, 64 x 196개씩 저장됩니까 ? predict는 할때마다 순서가 바뀌는듯... (predict1, 2 그림 다름)
# 아래는 동영상에 나오는 증강 CNN 모델코드와, 직접 작성한 predict 코드입니다.
. . . 앞부분 생략
model = tf.keras.Sequential([
. . . ])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(train_ds, validation_data=val_ds, epochs= 5 )
# 이다음부터 동영상에 없어서 직접 작성해봄...# 학습후 테스트용 그림에 대해 원래 분류코드(0/1)와 예측값을 동시에 출력해 보는 건데...
# 그림은 3 x 3으로 나오고 숫자도 그림당 2개(원분류, 예측분류)씩 출력되는데 뭔가
매칭이 안되는듯 합니다.... (예상은 test_ds 의 9개 그림이 분류값/예측값 함께 출력이 되길 기대하였는데... 실행오류는 없으나 원분류코드와 예측분류코드와 그림의 매칭이 이상합니다. predict 출력부분 한번 봐 주세요 ~~~
predition = model.predict(test_ds.take(1)) # test_ds의 1 batch(64개) 그림
for images, labels in test_ds.take(1): # 1배치 = 64 이미지 판단결과
for i in range(9):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(images[i].numpy().astype("uint8")) # 그림과 원분류코드는 test_ds
plt.title('%s, %s' % (int(labels[i]), predition[i])) # 예측분류코드는 prediction
plt.axis("off")
plt.show()
break
# 아래는 수행결과 메시지Found 25000 files belonging to 2 classes.
Using 5000 files for validation.
Found 12500 files belonging to 1 classes.train_ds =
<BatchDataset shapes: ((None, 64, 64, 3), (None,)), types: (tf.float32, tf.int32)>val_ds =
<BatchDataset shapes: ((None, 64, 64, 3), (None,)), types: (tf.float32, tf.int32)>test_ds =
<BatchDataset shapes: ((None, 64, 64, 3), (None,)), types: (tf.float32, tf.int32)>Batch Length : train_ds(313), val_ds(79), test_ds(196)
2021-06-08 01:07:34.139340: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)
Epoch 1/5
313/313 [==============================] - 60s 187ms/step - loss: 0.6456 - accuracy: 0.6144 - val_loss: 0.6471 - val_accuracy: 0.6470
Epoch 2/5
313/313 [==============================] - 74s 236ms/step - loss: 0.5592 - accuracy: 0.7127 - val_loss: 0.7121 - val_accuracy: 0.6538
Epoch 3/5
313/313 [==============================] - 101s 323ms/step - loss: 0.5184 - accuracy: 0.7416 - val_loss: 0.5057 - val_accuracy: 0.7520
Epoch 4/5
313/313 [==============================] - 107s 342ms/step - loss: 0.4820 - accuracy: 0.7682 - val_loss: 0.4761 - val_accuracy: 0.7734
Epoch 5/5
313/313 [==============================] - 100s 320ms/step - loss: 0.4546 - accuracy: 0.7854 - val_loss: 0.4009 - val_accuracy: 0.8172prediction probability is :
[[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[2.5699649e-25]
[0.0000000e+00]
[8.5365959e-17]
[1.0000000e+00]
[8.7515281e-21]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[2.7660945e-31]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[0.0000000e+00]
[2.9799326e-06]
[0.0000000e+00]
[1.0000000e+00]
[5.6649113e-01]
[0.0000000e+00]
[0.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[1.0000000e+00]
[4.7621374e-13]
[1.0000000e+00]
[3.2824305e-06]]
2021년 6월 8일 09:57 #10187
codingapple키 마스터일단 test 데이터셋도 학습용 데이터셋이랑 똑같이 전처리하고 255로 나누고 그랬는지 확인해야합니다
그리고 predict() 안에는 X데이터만 잘 집어넣으셔야합니다
test용 데이터셋은 만들기 귀찮아서 예시로 전이학습때 만들어둔 val 데이터셋을 쓰자면
배치한개 = val_ds.take(1)
for image,label in 배치한개:
result = model.predict(image)for i, item in enumerate(result) :
print('정답', label[i], '예측', item)그럼 출력결과는
정답 tf.Tensor(1, shape=(), dtype=int32) 예측 [1.]
정답 tf.Tensor(0, shape=(), dtype=int32) 예측 [0.00025876]
정답 tf.Tensor(0, shape=(), dtype=int32) 예측 [1.7366063e-16]
정답 tf.Tensor(1, shape=(), dtype=int32) 예측 [0.9955279]
정답 tf.Tensor(1, shape=(), dtype=int32) 예측 [0.6557688]
정답 tf.Tensor(0, shape=(), dtype=int32) 예측 [1.3039844e-12]대충 잘 때려맞추는 것 같습니다
-
글쓴이글
- 답변은 로그인 후 가능합니다.