Beispiel #1
0
                                                 target_size=TARGET_SIZE,
                                                 shuffle=False,
                                                 batch_size=BATCH_SIZE)

# Model definition
print('Creating model...')

input_ = Input(shape=(224, 224, 3))

base_model = MobileNet(
    weights='imagenet',
    include_top=False,
    input_tensor=input_,
)

base_model.trainable = False

for i in range(-6, 0):
    base_model.layers[i].trainable = True

custom_model = base_model.output
custom_model = GlobalAveragePooling2D()(custom_model)
custom_model = Dense(1024, activation='relu')(custom_model)
custom_model = Dropout(0.2)(custom_model)
custom_model = Dense(512, activation='relu')(custom_model)
custom_model = Dropout(0.2)(custom_model)
custom_model = Dense(128, activation='relu')(custom_model)
custom_model = Dropout(0.2)(custom_model)
custom_model = Dense(NUM_CLASSES, activation='softmax')(custom_model)

model = Model(base_model.input, custom_model)
Beispiel #2
0
validation_length = len(os.listdir(os.path.join(validation_dir, '01.temporary(가설)')))+len(os.listdir(os.path.join(validation_dir, '02.excavation(토)')))+len(os.listdir(os.path.join(validation_dir, '03.foudation(지정)')))+ len(os.listdir(os.path.join(validation_dir, '04.rc')))+ len(os.listdir(os.path.join(validation_dir, '05.steel(철골)')))+len(os.listdir(os.path.join(validation_dir, '06.masonry(조적)')))+len(os.listdir(os.path.join(validation_dir, '07.masonry_def')))+len(os.listdir(os.path.join(validation_dir, '08.plastering(미장)')))+ len(os.listdir(os.path.join(validation_dir, '09.plastering_def')))+ len(os.listdir(os.path.join(validation_dir, '10.waterproof(방수)')))+len(os.listdir(os.path.join(validation_dir, '11.waterproof_def')))+len(os.listdir(os.path.join(validation_dir, '12.carpentry(목공사)')))+ len(os.listdir(os.path.join(validation_dir, '13.metal(금속)')))+ len(os.listdir(os.path.join(validation_dir, '14.roof(지붕)')))+ len(os.listdir(os.path.join(validation_dir, '15.windows(창호,유리)')))+ len(os.listdir(os.path.join(validation_dir, '16.windows_def')))+len(os.listdir(os.path.join(validation_dir, '17.tiling(타일)')))+len(os.listdir(os.path.join(validation_dir, '18.tiling_def')))+len(os.listdir(os.path.join(validation_dir, '19.finishing(수장)')))+len(os.listdir(os.path.join(validation_dir, '20.finishing_def')))+len(os.listdir(os.path.join(validation_dir, '21.landscaping(조경)')))+len(os.listdir(os.path.join(validation_dir, '22.painting(도장)')))+len(os.listdir(os.path.join(validation_dir, '23.painting_def')))

# batch size
# batch size: 64 -> error
# batch size: 300 -> no error
batch_size = 128
#=================================================================================

# =============== 2. Define the model =====================
# tf.keras.models.Sequential: Lineak stack of layers
Mobile_MODEL = MobileNet(input_shape = (224,224,3),
                                    include_top = False,
                                    weights = 'imagenet'
                                    )

Mobile_MODEL.trainable=False
global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
prediction_layer = tf.keras.layers.Dense(23,activation='softmax')

model = tf.keras.Sequential([
  Mobile_MODEL,
  global_average_layer,
  prediction_layer
])

# print the summary of model
model.summary()
# visualize the model and save as "model_plot.png"
plot_model(model, to_file='model_plot_mobilenet.png', show_shapes=True, show_layer_names=True)

#=================================================================================
X_test_new = np.array(
  [np.asarray(Image.fromarray(X_test[i]).resize(
          (224, 224))) for i in range(0, len(X_test))])
X_test_new = X_test_new.astype("float32")
# 測試資料的資料前處理
test_input = preprocess_input(X_test_new)
# 定義模型
model = Sequential()
model.add(mobilenet_model)
model.add(Dropout(0.5))
model.add(GlobalAveragePooling2D())
model.add(Dropout(0.5))
model.add(Dense(10, activation="softmax"))
model.summary()   # 顯示模型摘要資訊
# 凍結上層模型
mobilenet_model.trainable = False
# 編譯模型
model.compile(loss="categorical_crossentropy", optimizer="adam",
              metrics=["accuracy"])
# 訓練模型
history = model.fit(train_input, Y_train, 
                    validation_data=(test_input, Y_test), 
                    epochs=17, batch_size=32, verbose=2)
# 評估模型
print("\nTesting ...")
loss, accuracy = model.evaluate(test_input, Y_test, verbose=0)
print("測試資料集的準確度 = {:.2f}".format(accuracy))
# 顯示圖表來分析模型的訓練過程
import matplotlib.pyplot as plt
# 顯示訓練和驗證損失
loss = history.history["loss"]