importtensorflowastfimportnumpyasnpfromtensorflow.keras.applications.resnet50importpreprocess_input,decode_predictionsfromtensorflow.keras.applications.resnet50importResNet50fromtensorflow.keras.preprocessingimportimagefromtensorflow.keras.layersimportDense,GlobalAveragePooling2D,Conv2D,MaxPooling2D,Flattenfromtensorflow.keras.modelsimportModel,Sequentialtr='/content/drive/MyDrive/mountainForest/train'val='/content/drive/MyDrive/mountainForest/validation'tr=tf.keras.preprocessing.image_dataset_from_directory(tr,labels="inferred",label_mode="binary",class_names=["forest","mountain"],seed=6,)val=tf.keras.preprocessing.image_dataset_from_directory(val,labels="inferred",label_mode="binary",class_names=["forest","mountain"],seed=6,)tr,val'''
Found 533 files belonging to 2 classes.
Found 195 files belonging to 2 classes.
(<BatchDataset shapes: ((None, 256, 256, 3), (None, 1)), types: (tf.float32, tf.float32)>,
<BatchDataset shapes: ((None, 256, 256, 3), (None, 1)), types: (tf.float32, tf.float32)>)
'''
Instatiate Model
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 기존 1000가지 클래스로의 분류문제를 풀 수 있는 ResNet 모델에서 Fully Connected layer 부분을 제거하는 역할을 한다.
resnet=ResNet50(weights='imagenet',include_top=False)# ResNet50 레이어의 파라미터를 학습하지 않도록 설정한다.
# 이렇게 설정하면 역전파를 통해 오차 정보가 전파 되더라도 파라미터가 업데이트되지 않는다.
forlayerinresnet.layers:layer.trainable=False# 모델에 추가로 Fully connected layer를 추가한다.
# 이진 분류에 맞게 출력층을 설계한다.
x=resnet.outputx=GlobalAveragePooling2D()(x)x=Dense(1024,activation='relu')(x)predictions=Dense(1,activation='sigmoid')(x)model=Model(resnet.input,predictions)