Pretrain model là gì

Lời mở đầu

Bài toán phân loại chó mèo là bài toán khá cũ tại thời điểm hiện tại. Tuy nhiên, đối với các bạn mới bước chân vào con đường machine learning thì đây là một trong những bài toán cơ bản để các bạn thực hành sử dụng và tìm hiểu thư viện mà mình đang có. Ở đây, chúng ta sẽ sử dụng pretrain model có sẵn của kares áp dụng trên tập dữ liệu. Các bạn có thể download tập dữ liệu train và test ở địa chỉ //www.kaggle.com/c/dogs-vs-cats/download/train.zip và //www.kaggle.com/c/dogs-vs-cats/download/test1.zip để bắt đầu thực hiện.

Thực hiện

Sau khi giải nén dữ liệu, ta thấy rằng thư mục train có cấu trúc đặt trên sẽ là label.số thứ tự.jpg. Trong đó label có thể là dog hoặc cat, số thứ tự tăng dần từ 0 đến . 12499. Để đảm bảo đúng với mô hình, ta phải cấu trúc lại dữ liệu thành dạng.data_dir/classname1/*.* data_dir/classname2/*.* ...

Vì vậy, ta tạo ra thư mục cat và copy những file bắt đầu bằng cat.* vào thư mục cat. Làm tương tự với thư mục dog.

Đầu tiên, các bạn download file pretrain model, giải nén ra và để ở đâu đó trong ổ cứng của máy bạn. Đường dẫn file pretrain model các bạn có thể download ở //download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz. Các bạn có thể download các file pretrain khác nếu có hứng thú tìm hiểu.

Tiếp theo, chúng ta sẽ load dataset lên và tranform nó để đưa vào huấn luyện.import sys import os from collections import defaultdict import numpy as np import scipy.misc def preprocess_input[x0]: x = x0 / 255. x -= 0.5 x *= 2. return x def reverse_preprocess_input[x0]: x = x0 / 2.0 x += 0.5 x *= 255. return x def dataset[base_dir, n]: print["base dir: "+base_dir] print["n: "+str[n]] n = int[n] d = defaultdict[list] for root, subdirs, files in os.walk[base_dir]: for filename in files: file_path = os.path.join[root, filename] assert file_path.startswith[base_dir] suffix = file_path[len[base_dir]:] suffix = suffix.lstrip["/"] suffix = suffix.lstrip["\\"] if[suffix.find['/']>-1]: #linux label = suffix.split["/"][0] else: #window label = suffix.split["\\"][0] d[label].append[file_path] print["walk directory complete"] tags = sorted[d.keys[]] processed_image_count = 0 useful_image_count = 0 X = [] y = [] for class_index, class_name in enumerate[tags]: filenames = d[class_name] for filename in filenames: processed_image_count += 1 if processed_image_count%100 ==0: print[class_name+"\tprocess: "+str[processed_image_count]+"\t"+str[len[d[class_name]]]] img = scipy.misc.imread[filename] height, width, chan = img.shape assert chan == 3 aspect_ratio = float[max[[height, width]]] / min[[height, width]] if aspect_ratio > 2: continue # We pick the largest center square. centery = height // 2 centerx = width // 2 radius = min[[centerx, centery]] img = img[centery-radius:centery+radius, centerx-radius:centerx+radius] img = scipy.misc.imresize[img, size=[n, n], interp='bilinear'] X.append[img] y.append[class_index] useful_image_count += 1 print["processed %d, used %d" % [processed_image_count, useful_image_count]] X = np.array[X].astype[np.float32] #X = X.transpose[[0, 3, 1, 2]] X = preprocess_input[X] y = np.array[y] perm = np.random.permutation[len[y]] X = X[perm] y = y[perm] print["classes:",end=" "] for class_index, class_name in enumerate[tags]: print[class_name, sum[y==class_index],end=" "] print["X shape: ",X.shape] return X, y, tags

Đoạn code trên khá đơn giản và dễ hiểu. Lưu ý ở đây là với những bức ảnh có tỷ lệ width và height > 2 thì mình sẽ loại chúng ra khỏi tập dữ liệu.

Tiếp theo, chúng ta sẽ xây dựng mô hình dựa trên mô hình InceptionV3 có sẵn, thêm một lớp softmax ở cuối để phân lớp dữ liệu, chúng ta sẽ huấn luyện lớp softmax này. Các lớp trước lớp softmax này sẽ bị đóng băng [không cập nhật trọng số trong quá trình huấn luyện ]. # create the base pre-trained model def build_model[nb_classes]: base_model = InceptionV3[weights='imagenet', include_top=False] # add a global spatial average pooling layer x = base_model.output x = GlobalAveragePooling2D[][x] # let's add a fully-connected layer x = Dense[1024, activation='relu'][x] # and a logistic layer predictions = Dense[nb_classes, activation='softmax'][x] # this is the model we will train model = Model[inputs=base_model.input, outputs=predictions] # first: train only the top layers [which were randomly initialized] # i.e. freeze all convolutional InceptionV3 layers for layer in base_model.layers: layer.trainable = False # compile the model [should be done *after* setting layers to non-trainable] print["starting model compile"] compile[model] print["model compile done"] return model

Visualize một chút xíu về kiến trúc inceptionV3 mình đang dùng.__________________________________________________________________________________________________ Layer [type]                    Output Shape         Param #     Connected to ================================================================================================== input_1 [InputLayer]            [None, None, None, 3 0 __________________________________________________________________________________________________ conv2d_1 [Conv2D]               [None, None, None, 3 864         input_1[0][0] __________________________________________________________________________________________________ batch_normalization_1 [BatchNor [None, None, None, 3 96          conv2d_1[0][0] __________________________________________________________________________________________________ activation_1 [Activation]       [None, None, None, 3 0           batch_normalization_1[0][0] __________________________________________________________________________________________________ conv2d_2 [Conv2D]               [None, None, None, 3 9216        activation_1[0][0] __________________________________________________________________________________________________ batch_normalization_2 [BatchNor [None, None, None, 3 96          conv2d_2[0][0] __________________________________________________________________________________________________ activation_2 [Activation]       [None, None, None, 3 0           batch_normalization_2[0][0] __________________________________________________________________________________________________ conv2d_3 [Conv2D]               [None, None, None, 6 18432       activation_2[0][0] __________________________________________________________________________________________________ batch_normalization_3 [BatchNor [None, None, None, 6 192         conv2d_3[0][0] __________________________________________________________________________________________________ activation_3 [Activation]       [None, None, None, 6 0           batch_normalization_3[0][0] __________________________________________________________________________________________________ max_pooling2d_1 [MaxPooling2D]  [None, None, None, 6 0           activation_3[0][0] __________________________________________________________________________________________________ conv2d_4 [Conv2D]               [None, None, None, 8 5120        max_pooling2d_1[0][0] __________________________________________________________________________________________________ batch_normalization_4 [BatchNor [None, None, None, 8 240         conv2d_4[0][0] __________________________________________________________________________________________________ activation_4 [Activation]       [None, None, None, 8 0           batch_normalization_4[0][0] __________________________________________________________________________________________________ conv2d_5 [Conv2D]               [None, None, None, 1 138240      activation_4[0][0] __________________________________________________________________________________________________ batch_normalization_5 [BatchNor [None, None, None, 1 576         conv2d_5[0][0] __________________________________________________________________________________________________ activation_5 [Activation]       [None, None, None, 1 0           batch_normalization_5[0][0] __________________________________________________________________________________________________ max_pooling2d_2 [MaxPooling2D]  [None, None, None, 1 0           activation_5[0][0] __________________________________________________________________________________________________ conv2d_9 [Conv2D]               [None, None, None, 6 12288       max_pooling2d_2[0][0] __________________________________________________________________________________________________ batch_normalization_9 [BatchNor [None, None, None, 6 192         conv2d_9[0][0] __________________________________________________________________________________________________ activation_9 [Activation]       [None, None, None, 6 0           batch_normalization_9[0][0] __________________________________________________________________________________________________ conv2d_7 [Conv2D]               [None, None, None, 4 9216        max_pooling2d_2[0][0] __________________________________________________________________________________________________ conv2d_10 [Conv2D]              [None, None, None, 9 55296       activation_9[0][0] __________________________________________________________________________________________________ batch_normalization_7 [BatchNor [None, None, None, 4 144         conv2d_7[0][0] __________________________________________________________________________________________________ batch_normalization_10 [BatchNo [None, None, None, 9 288         conv2d_10[0][0] __________________________________________________________________________________________________ activation_7 [Activation]       [None, None, None, 4 0           batch_normalization_7[0][0] __________________________________________________________________________________________________ activation_10 [Activation]      [None, None, None, 9 0           batch_normalization_10[0][0] __________________________________________________________________________________________________ average_pooling2d_1 [AveragePoo [None, None, None, 1 0           max_pooling2d_2[0][0] __________________________________________________________________________________________________ conv2d_6 [Conv2D]               [None, None, None, 6 12288       max_pooling2d_2[0][0] __________________________________________________________________________________________________ conv2d_8 [Conv2D]               [None, None, None, 6 76800       activation_7[0][0] __________________________________________________________________________________________________ conv2d_11 [Conv2D]              [None, None, None, 9 82944       activation_10[0][0] __________________________________________________________________________________________________ conv2d_12 [Conv2D]              [None, None, None, 3 6144        average_pooling2d_1[0][0] __________________________________________________________________________________________________ batch_normalization_6 [BatchNor [None, None, None, 6 192         conv2d_6[0][0] __________________________________________________________________________________________________ batch_normalization_8 [BatchNor [None, None, None, 6 192         conv2d_8[0][0] __________________________________________________________________________________________________ batch_normalization_11 [BatchNo [None, None, None, 9 288         conv2d_11[0][0] __________________________________________________________________________________________________ batch_normalization_12 [BatchNo [None, None, None, 3 96          conv2d_12[0][0] __________________________________________________________________________________________________ activation_6 [Activation]       [None, None, None, 6 0           batch_normalization_6[0][0] __________________________________________________________________________________________________ activation_8 [Activation]       [None, None, None, 6 0           batch_normalization_8[0][0] __________________________________________________________________________________________________ activation_11 [Activation]      [None, None, None, 9 0           batch_normalization_11[0][0] __________________________________________________________________________________________________ activation_12 [Activation]      [None, None, None, 3 0           batch_normalization_12[0][0] __________________________________________________________________________________________________ mixed0 [Concatenate]            [None, None, None, 2 0           activation_6[0][0] activation_8[0][0] activation_11[0][0] activation_12[0][0] __________________________________________________________________________________________________ conv2d_16 [Conv2D]              [None, None, None, 6 16384       mixed0[0][0] __________________________________________________________________________________________________ batch_normalization_16 [BatchNo [None, None, None, 6 192         conv2d_16[0][0] __________________________________________________________________________________________________ activation_16 [Activation]      [None, None, None, 6 0           batch_normalization_16[0][0] __________________________________________________________________________________________________ conv2d_14 [Conv2D]              [None, None, None, 4 12288       mixed0[0][0] __________________________________________________________________________________________________ conv2d_17 [Conv2D]              [None, None, None, 9 55296       activation_16[0][0] __________________________________________________________________________________________________ batch_normalization_14 [BatchNo [None, None, None, 4 144         conv2d_14[0][0] __________________________________________________________________________________________________ batch_normalization_17 [BatchNo [None, None, None, 9 288         conv2d_17[0][0] __________________________________________________________________________________________________ activation_14 [Activation]      [None, None, None, 4 0           batch_normalization_14[0][0] __________________________________________________________________________________________________ activation_17 [Activation]      [None, None, None, 9 0           batch_normalization_17[0][0] __________________________________________________________________________________________________ average_pooling2d_2 [AveragePoo [None, None, None, 2 0           mixed0[0][0] __________________________________________________________________________________________________ conv2d_13 [Conv2D]              [None, None, None, 6 16384       mixed0[0][0] __________________________________________________________________________________________________ conv2d_15 [Conv2D]              [None, None, None, 6 76800       activation_14[0][0] __________________________________________________________________________________________________ conv2d_18 [Conv2D]              [None, None, None, 9 82944       activation_17[0][0] __________________________________________________________________________________________________ conv2d_19 [Conv2D]              [None, None, None, 6 16384       average_pooling2d_2[0][0] __________________________________________________________________________________________________ batch_normalization_13 [BatchNo [None, None, None, 6 192         conv2d_13[0][0] __________________________________________________________________________________________________ batch_normalization_15 [BatchNo [None, None, None, 6 192         conv2d_15[0][0] __________________________________________________________________________________________________ batch_normalization_18 [BatchNo [None, None, None, 9 288         conv2d_18[0][0] __________________________________________________________________________________________________ batch_normalization_19 [BatchNo [None, None, None, 6 192         conv2d_19[0][0] __________________________________________________________________________________________________ activation_13 [Activation]      [None, None, None, 6 0           batch_normalization_13[0][0] __________________________________________________________________________________________________ activation_15 [Activation]      [None, None, None, 6 0           batch_normalization_15[0][0] __________________________________________________________________________________________________ activation_18 [Activation]      [None, None, None, 9 0           batch_normalization_18[0][0] __________________________________________________________________________________________________ activation_19 [Activation]      [None, None, None, 6 0           batch_normalization_19[0][0] __________________________________________________________________________________________________ mixed1 [Concatenate]            [None, None, None, 2 0           activation_13[0][0] activation_15[0][0] activation_18[0][0] activation_19[0][0] __________________________________________________________________________________________________ conv2d_23 [Conv2D]              [None, None, None, 6 18432       mixed1[0][0] __________________________________________________________________________________________________ batch_normalization_23 [BatchNo [None, None, None, 6 192         conv2d_23[0][0] __________________________________________________________________________________________________ activation_23 [Activation]      [None, None, None, 6 0           batch_normalization_23[0][0] __________________________________________________________________________________________________ conv2d_21 [Conv2D]              [None, None, None, 4 13824       mixed1[0][0] __________________________________________________________________________________________________ conv2d_24 [Conv2D]              [None, None, None, 9 55296       activation_23[0][0] __________________________________________________________________________________________________ batch_normalization_21 [BatchNo [None, None, None, 4 144         conv2d_21[0][0] __________________________________________________________________________________________________ batch_normalization_24 [BatchNo [None, None, None, 9 288         conv2d_24[0][0] __________________________________________________________________________________________________ activation_21 [Activation]      [None, None, None, 4 0           batch_normalization_21[0][0] __________________________________________________________________________________________________ activation_24 [Activation]      [None, None, None, 9 0           batch_normalization_24[0][0] __________________________________________________________________________________________________ average_pooling2d_3 [AveragePoo [None, None, None, 2 0           mixed1[0][0] __________________________________________________________________________________________________ conv2d_20 [Conv2D]              [None, None, None, 6 18432       mixed1[0][0] __________________________________________________________________________________________________ conv2d_22 [Conv2D]              [None, None, None, 6 76800       activation_21[0][0] __________________________________________________________________________________________________ conv2d_25 [Conv2D]              [None, None, None, 9 82944       activation_24[0][0] __________________________________________________________________________________________________ conv2d_26 [Conv2D]              [None, None, None, 6 18432       average_pooling2d_3[0][0] __________________________________________________________________________________________________ batch_normalization_20 [BatchNo [None, None, None, 6 192         conv2d_20[0][0] __________________________________________________________________________________________________ batch_normalization_22 [BatchNo [None, None, None, 6 192         conv2d_22[0][0] __________________________________________________________________________________________________ batch_normalization_25 [BatchNo [None, None, None, 9 288         conv2d_25[0][0] __________________________________________________________________________________________________ batch_normalization_26 [BatchNo [None, None, None, 6 192         conv2d_26[0][0] __________________________________________________________________________________________________ activation_20 [Activation]      [None, None, None, 6 0           batch_normalization_20[0][0] __________________________________________________________________________________________________ activation_22 [Activation]      [None, None, None, 6 0           batch_normalization_22[0][0] __________________________________________________________________________________________________ activation_25 [Activation]      [None, None, None, 9 0           batch_normalization_25[0][0] __________________________________________________________________________________________________ activation_26 [Activation]      [None, None, None, 6 0           batch_normalization_26[0][0] __________________________________________________________________________________________________ mixed2 [Concatenate]            [None, None, None, 2 0           activation_20[0][0] activation_22[0][0] activation_25[0][0] activation_26[0][0] __________________________________________________________________________________________________ conv2d_28 [Conv2D]              [None, None, None, 6 18432       mixed2[0][0] __________________________________________________________________________________________________ batch_normalization_28 [BatchNo [None, None, None, 6 192         conv2d_28[0][0] __________________________________________________________________________________________________ activation_28 [Activation]      [None, None, None, 6 0           batch_normalization_28[0][0] __________________________________________________________________________________________________ conv2d_29 [Conv2D]              [None, None, None, 9 55296       activation_28[0][0] __________________________________________________________________________________________________ batch_normalization_29 [BatchNo [None, None, None, 9 288         conv2d_29[0][0] __________________________________________________________________________________________________ activation_29 [Activation]      [None, None, None, 9 0           batch_normalization_29[0][0] __________________________________________________________________________________________________ conv2d_27 [Conv2D]              [None, None, None, 3 995328      mixed2[0][0] __________________________________________________________________________________________________ conv2d_30 [Conv2D]              [None, None, None, 9 82944       activation_29[0][0] __________________________________________________________________________________________________ batch_normalization_27 [BatchNo [None, None, None, 3 1152        conv2d_27[0][0] __________________________________________________________________________________________________ batch_normalization_30 [BatchNo [None, None, None, 9 288         conv2d_30[0][0] __________________________________________________________________________________________________ activation_27 [Activation]      [None, None, None, 3 0           batch_normalization_27[0][0] __________________________________________________________________________________________________ activation_30 [Activation]      [None, None, None, 9 0           batch_normalization_30[0][0] __________________________________________________________________________________________________ max_pooling2d_3 [MaxPooling2D]  [None, None, None, 2 0           mixed2[0][0] __________________________________________________________________________________________________ mixed3 [Concatenate]            [None, None, None, 7 0           activation_27[0][0] activation_30[0][0] max_pooling2d_3[0][0] __________________________________________________________________________________________________ conv2d_35 [Conv2D]              [None, None, None, 1 98304       mixed3[0][0] __________________________________________________________________________________________________ batch_normalization_35 [BatchNo [None, None, None, 1 384         conv2d_35[0][0] __________________________________________________________________________________________________ activation_35 [Activation]      [None, None, None, 1 0           batch_normalization_35[0][0] __________________________________________________________________________________________________ conv2d_36 [Conv2D]              [None, None, None, 1 114688      activation_35[0][0] __________________________________________________________________________________________________ batch_normalization_36 [BatchNo [None, None, None, 1 384         conv2d_36[0][0] __________________________________________________________________________________________________ activation_36 [Activation]      [None, None, None, 1 0           batch_normalization_36[0][0] __________________________________________________________________________________________________ conv2d_32 [Conv2D]              [None, None, None, 1 98304       mixed3[0][0] __________________________________________________________________________________________________ conv2d_37 [Conv2D]              [None, None, None, 1 114688      activation_36[0][0] __________________________________________________________________________________________________ batch_normalization_32 [BatchNo [None, None, None, 1 384         conv2d_32[0][0] __________________________________________________________________________________________________ batch_normalization_37 [BatchNo [None, None, None, 1 384         conv2d_37[0][0] __________________________________________________________________________________________________ activation_32 [Activation]      [None, None, None, 1 0           batch_normalization_32[0][0] __________________________________________________________________________________________________ activation_37 [Activation]      [None, None, None, 1 0           batch_normalization_37[0][0] __________________________________________________________________________________________________ conv2d_33 [Conv2D]              [None, None, None, 1 114688      activation_32[0][0] __________________________________________________________________________________________________ conv2d_38 [Conv2D]              [None, None, None, 1 114688      activation_37[0][0] __________________________________________________________________________________________________ batch_normalization_33 [BatchNo [None, None, None, 1 384         conv2d_33[0][0] __________________________________________________________________________________________________ batch_normalization_38 [BatchNo [None, None, None, 1 384         conv2d_38[0][0] __________________________________________________________________________________________________ activation_33 [Activation]      [None, None, None, 1 0           batch_normalization_33[0][0] __________________________________________________________________________________________________ activation_38 [Activation]      [None, None, None, 1 0           batch_normalization_38[0][0] __________________________________________________________________________________________________ average_pooling2d_4 [AveragePoo [None, None, None, 7 0           mixed3[0][0] __________________________________________________________________________________________________ conv2d_31 [Conv2D]              [None, None, None, 1 147456      mixed3[0][0] __________________________________________________________________________________________________ conv2d_34 [Conv2D]              [None, None, None, 1 172032      activation_33[0][0] __________________________________________________________________________________________________ conv2d_39 [Conv2D]              [None, None, None, 1 172032      activation_38[0][0] __________________________________________________________________________________________________ conv2d_40 [Conv2D]              [None, None, None, 1 147456      average_pooling2d_4[0][0] __________________________________________________________________________________________________ batch_normalization_31 [BatchNo [None, None, None, 1 576         conv2d_31[0][0] __________________________________________________________________________________________________ batch_normalization_34 [BatchNo [None, None, None, 1 576         conv2d_34[0][0] __________________________________________________________________________________________________ batch_normalization_39 [BatchNo [None, None, None, 1 576         conv2d_39[0][0] __________________________________________________________________________________________________ batch_normalization_40 [BatchNo [None, None, None, 1 576         conv2d_40[0][0] __________________________________________________________________________________________________ activation_31 [Activation]      [None, None, None, 1 0           batch_normalization_31[0][0] __________________________________________________________________________________________________ activation_34 [Activation]      [None, None, None, 1 0           batch_normalization_34[0][0] __________________________________________________________________________________________________ activation_39 [Activation]      [None, None, None, 1 0           batch_normalization_39[0][0] __________________________________________________________________________________________________ activation_40 [Activation]      [None, None, None, 1 0           batch_normalization_40[0][0] __________________________________________________________________________________________________ mixed4 [Concatenate]            [None, None, None, 7 0           activation_31[0][0] activation_34[0][0] activation_39[0][0] activation_40[0][0] __________________________________________________________________________________________________ conv2d_45 [Conv2D]              [None, None, None, 1 122880      mixed4[0][0] __________________________________________________________________________________________________ batch_normalization_45 [BatchNo [None, None, None, 1 480         conv2d_45[0][0] __________________________________________________________________________________________________ activation_45 [Activation]      [None, None, None, 1 0           batch_normalization_45[0][0] __________________________________________________________________________________________________ conv2d_46 [Conv2D]              [None, None, None, 1 179200      activation_45[0][0] __________________________________________________________________________________________________ batch_normalization_46 [BatchNo [None, None, None, 1 480         conv2d_46[0][0] __________________________________________________________________________________________________ activation_46 [Activation]      [None, None, None, 1 0           batch_normalization_46[0][0] __________________________________________________________________________________________________ conv2d_42 [Conv2D]              [None, None, None, 1 122880      mixed4[0][0] __________________________________________________________________________________________________ conv2d_47 [Conv2D]              [None, None, None, 1 179200      activation_46[0][0] __________________________________________________________________________________________________ batch_normalization_42 [BatchNo [None, None, None, 1 480         conv2d_42[0][0] __________________________________________________________________________________________________ batch_normalization_47 [BatchNo [None, None, None, 1 480         conv2d_47[0][0] __________________________________________________________________________________________________ activation_42 [Activation]      [None, None, None, 1 0           batch_normalization_42[0][0] __________________________________________________________________________________________________ activation_47 [Activation]      [None, None, None, 1 0           batch_normalization_47[0][0] __________________________________________________________________________________________________ conv2d_43 [Conv2D]              [None, None, None, 1 179200      activation_42[0][0] __________________________________________________________________________________________________ conv2d_48 [Conv2D]              [None, None, None, 1 179200      activation_47[0][0] __________________________________________________________________________________________________ batch_normalization_43 [BatchNo [None, None, None, 1 480         conv2d_43[0][0] __________________________________________________________________________________________________ batch_normalization_48 [BatchNo [None, None, None, 1 480         conv2d_48[0][0] __________________________________________________________________________________________________ activation_43 [Activation]      [None, None, None, 1 0           batch_normalization_43[0][0] __________________________________________________________________________________________________ activation_48 [Activation]      [None, None, None, 1 0           batch_normalization_48[0][0] __________________________________________________________________________________________________ average_pooling2d_5 [AveragePoo [None, None, None, 7 0           mixed4[0][0] __________________________________________________________________________________________________ conv2d_41 [Conv2D]              [None, None, None, 1 147456      mixed4[0][0] __________________________________________________________________________________________________ conv2d_44 [Conv2D]              [None, None, None, 1 215040      activation_43[0][0] __________________________________________________________________________________________________ conv2d_49 [Conv2D]              [None, None, None, 1 215040      activation_48[0][0] __________________________________________________________________________________________________ conv2d_50 [Conv2D]              [None, None, None, 1 147456      average_pooling2d_5[0][0] __________________________________________________________________________________________________ batch_normalization_41 [BatchNo [None, None, None, 1 576         conv2d_41[0][0] __________________________________________________________________________________________________ batch_normalization_44 [BatchNo [None, None, None, 1 576         conv2d_44[0][0] __________________________________________________________________________________________________ batch_normalization_49 [BatchNo [None, None, None, 1 576         conv2d_49[0][0] __________________________________________________________________________________________________ batch_normalization_50 [BatchNo [None, None, None, 1 576         conv2d_50[0][0] __________________________________________________________________________________________________ activation_41 [Activation]      [None, None, None, 1 0           batch_normalization_41[0][0] __________________________________________________________________________________________________ activation_44 [Activation]      [None, None, None, 1 0           batch_normalization_44[0][0] __________________________________________________________________________________________________ activation_49 [Activation]      [None, None, None, 1 0           batch_normalization_49[0][0] __________________________________________________________________________________________________ activation_50 [Activation]      [None, None, None, 1 0           batch_normalization_50[0][0] __________________________________________________________________________________________________ mixed5 [Concatenate]            [None, None, None, 7 0           activation_41[0][0] activation_44[0][0] activation_49[0][0] activation_50[0][0] __________________________________________________________________________________________________ conv2d_55 [Conv2D]              [None, None, None, 1 122880      mixed5[0][0] __________________________________________________________________________________________________ batch_normalization_55 [BatchNo [None, None, None, 1 480         conv2d_55[0][0] __________________________________________________________________________________________________ activation_55 [Activation]      [None, None, None, 1 0           batch_normalization_55[0][0] __________________________________________________________________________________________________ conv2d_56 [Conv2D]              [None, None, None, 1 179200      activation_55[0][0] __________________________________________________________________________________________________ batch_normalization_56 [BatchNo [None, None, None, 1 480         conv2d_56[0][0] __________________________________________________________________________________________________ activation_56 [Activation]      [None, None, None, 1 0           batch_normalization_56[0][0] __________________________________________________________________________________________________ conv2d_52 [Conv2D]              [None, None, None, 1 122880      mixed5[0][0] __________________________________________________________________________________________________ conv2d_57 [Conv2D]              [None, None, None, 1 179200      activation_56[0][0] __________________________________________________________________________________________________ batch_normalization_52 [BatchNo [None, None, None, 1 480         conv2d_52[0][0] __________________________________________________________________________________________________ batch_normalization_57 [BatchNo [None, None, None, 1 480         conv2d_57[0][0] __________________________________________________________________________________________________ activation_52 [Activation]      [None, None, None, 1 0           batch_normalization_52[0][0] __________________________________________________________________________________________________ activation_57 [Activation]      [None, None, None, 1 0           batch_normalization_57[0][0] __________________________________________________________________________________________________ conv2d_53 [Conv2D]              [None, None, None, 1 179200      activation_52[0][0] __________________________________________________________________________________________________ conv2d_58 [Conv2D]              [None, None, None, 1 179200      activation_57[0][0] __________________________________________________________________________________________________ batch_normalization_53 [BatchNo [None, None, None, 1 480         conv2d_53[0][0] __________________________________________________________________________________________________ batch_normalization_58 [BatchNo [None, None, None, 1 480         conv2d_58[0][0] __________________________________________________________________________________________________ activation_53 [Activation]      [None, None, None, 1 0           batch_normalization_53[0][0] __________________________________________________________________________________________________ activation_58 [Activation]      [None, None, None, 1 0           batch_normalization_58[0][0] __________________________________________________________________________________________________ average_pooling2d_6 [AveragePoo [None, None, None, 7 0           mixed5[0][0] __________________________________________________________________________________________________ conv2d_51 [Conv2D]              [None, None, None, 1 147456      mixed5[0][0] __________________________________________________________________________________________________ conv2d_54 [Conv2D]              [None, None, None, 1 215040      activation_53[0][0] __________________________________________________________________________________________________ conv2d_59 [Conv2D]              [None, None, None, 1 215040      activation_58[0][0] __________________________________________________________________________________________________ conv2d_60 [Conv2D]              [None, None, None, 1 147456      average_pooling2d_6[0][0] __________________________________________________________________________________________________ batch_normalization_51 [BatchNo [None, None, None, 1 576         conv2d_51[0][0] __________________________________________________________________________________________________ batch_normalization_54 [BatchNo [None, None, None, 1 576         conv2d_54[0][0] __________________________________________________________________________________________________ batch_normalization_59 [BatchNo [None, None, None, 1 576         conv2d_59[0][0] __________________________________________________________________________________________________ batch_normalization_60 [BatchNo [None, None, None, 1 576         conv2d_60[0][0] __________________________________________________________________________________________________ activation_51 [Activation]      [None, None, None, 1 0           batch_normalization_51[0][0] __________________________________________________________________________________________________ activation_54 [Activation]      [None, None, None, 1 0           batch_normalization_54[0][0] __________________________________________________________________________________________________ activation_59 [Activation]      [None, None, None, 1 0           batch_normalization_59[0][0] __________________________________________________________________________________________________ activation_60 [Activation]      [None, None, None, 1 0           batch_normalization_60[0][0] __________________________________________________________________________________________________ mixed6 [Concatenate]            [None, None, None, 7 0           activation_51[0][0] activation_54[0][0] activation_59[0][0] activation_60[0][0] __________________________________________________________________________________________________ conv2d_65 [Conv2D]              [None, None, None, 1 147456      mixed6[0][0] __________________________________________________________________________________________________ batch_normalization_65 [BatchNo [None, None, None, 1 576         conv2d_65[0][0] __________________________________________________________________________________________________ activation_65 [Activation]      [None, None, None, 1 0           batch_normalization_65[0][0] __________________________________________________________________________________________________ conv2d_66 [Conv2D]              [None, None, None, 1 258048      activation_65[0][0] __________________________________________________________________________________________________ batch_normalization_66 [BatchNo [None, None, None, 1 576         conv2d_66[0][0] __________________________________________________________________________________________________ activation_66 [Activation]      [None, None, None, 1 0           batch_normalization_66[0][0] __________________________________________________________________________________________________ conv2d_62 [Conv2D]              [None, None, None, 1 147456      mixed6[0][0] __________________________________________________________________________________________________ conv2d_67 [Conv2D]              [None, None, None, 1 258048      activation_66[0][0] __________________________________________________________________________________________________ batch_normalization_62 [BatchNo [None, None, None, 1 576         conv2d_62[0][0] __________________________________________________________________________________________________ batch_normalization_67 [BatchNo [None, None, None, 1 576         conv2d_67[0][0] __________________________________________________________________________________________________ activation_62 [Activation]      [None, None, None, 1 0           batch_normalization_62[0][0] __________________________________________________________________________________________________ activation_67 [Activation]      [None, None, None, 1 0           batch_normalization_67[0][0] __________________________________________________________________________________________________ conv2d_63 [Conv2D]              [None, None, None, 1 258048      activation_62[0][0] __________________________________________________________________________________________________ conv2d_68 [Conv2D]              [None, None, None, 1 258048      activation_67[0][0] __________________________________________________________________________________________________ batch_normalization_63 [BatchNo [None, None, None, 1 576         conv2d_63[0][0] __________________________________________________________________________________________________ batch_normalization_68 [BatchNo [None, None, None, 1 576         conv2d_68[0][0] __________________________________________________________________________________________________ activation_63 [Activation]      [None, None, None, 1 0           batch_normalization_63[0][0] __________________________________________________________________________________________________ activation_68 [Activation]      [None, None, None, 1 0           batch_normalization_68[0][0] __________________________________________________________________________________________________ average_pooling2d_7 [AveragePoo [None, None, None, 7 0           mixed6[0][0] __________________________________________________________________________________________________ conv2d_61 [Conv2D]              [None, None, None, 1 147456      mixed6[0][0] __________________________________________________________________________________________________ conv2d_64 [Conv2D]              [None, None, None, 1 258048      activation_63[0][0] __________________________________________________________________________________________________ conv2d_69 [Conv2D]              [None, None, None, 1 258048      activation_68[0][0] __________________________________________________________________________________________________ conv2d_70 [Conv2D]              [None, None, None, 1 147456      average_pooling2d_7[0][0] __________________________________________________________________________________________________ batch_normalization_61 [BatchNo [None, None, None, 1 576         conv2d_61[0][0] __________________________________________________________________________________________________ batch_normalization_64 [BatchNo [None, None, None, 1 576         conv2d_64[0][0] __________________________________________________________________________________________________ batch_normalization_69 [BatchNo [None, None, None, 1 576         conv2d_69[0][0] __________________________________________________________________________________________________ batch_normalization_70 [BatchNo [None, None, None, 1 576         conv2d_70[0][0] __________________________________________________________________________________________________ activation_61 [Activation]      [None, None, None, 1 0           batch_normalization_61[0][0] __________________________________________________________________________________________________ activation_64 [Activation]      [None, None, None, 1 0           batch_normalization_64[0][0] __________________________________________________________________________________________________ activation_69 [Activation]      [None, None, None, 1 0           batch_normalization_69[0][0] __________________________________________________________________________________________________ activation_70 [Activation]      [None, None, None, 1 0           batch_normalization_70[0][0] __________________________________________________________________________________________________ mixed7 [Concatenate]            [None, None, None, 7 0           activation_61[0][0] activation_64[0][0] activation_69[0][0] activation_70[0][0] __________________________________________________________________________________________________ conv2d_73 [Conv2D]              [None, None, None, 1 147456      mixed7[0][0] __________________________________________________________________________________________________ batch_normalization_73 [BatchNo [None, None, None, 1 576         conv2d_73[0][0] __________________________________________________________________________________________________ activation_73 [Activation]      [None, None, None, 1 0           batch_normalization_73[0][0] __________________________________________________________________________________________________ conv2d_74 [Conv2D]              [None, None, None, 1 258048      activation_73[0][0] __________________________________________________________________________________________________ batch_normalization_74 [BatchNo [None, None, None, 1 576         conv2d_74[0][0] __________________________________________________________________________________________________ activation_74 [Activation]      [None, None, None, 1 0           batch_normalization_74[0][0] __________________________________________________________________________________________________ conv2d_71 [Conv2D]              [None, None, None, 1 147456      mixed7[0][0] __________________________________________________________________________________________________ conv2d_75 [Conv2D]              [None, None, None, 1 258048      activation_74[0][0] __________________________________________________________________________________________________ batch_normalization_71 [BatchNo [None, None, None, 1 576         conv2d_71[0][0] __________________________________________________________________________________________________ batch_normalization_75 [BatchNo [None, None, None, 1 576         conv2d_75[0][0] __________________________________________________________________________________________________ activation_71 [Activation]      [None, None, None, 1 0           batch_normalization_71[0][0] __________________________________________________________________________________________________ activation_75 [Activation]      [None, None, None, 1 0           batch_normalization_75[0][0] __________________________________________________________________________________________________ conv2d_72 [Conv2D]              [None, None, None, 3 552960      activation_71[0][0] __________________________________________________________________________________________________ conv2d_76 [Conv2D]              [None, None, None, 1 331776      activation_75[0][0] __________________________________________________________________________________________________ batch_normalization_72 [BatchNo [None, None, None, 3 960         conv2d_72[0][0] __________________________________________________________________________________________________ batch_normalization_76 [BatchNo [None, None, None, 1 576         conv2d_76[0][0] __________________________________________________________________________________________________ activation_72 [Activation]      [None, None, None, 3 0           batch_normalization_72[0][0] __________________________________________________________________________________________________ activation_76 [Activation]      [None, None, None, 1 0           batch_normalization_76[0][0] __________________________________________________________________________________________________ max_pooling2d_4 [MaxPooling2D]  [None, None, None, 7 0           mixed7[0][0] __________________________________________________________________________________________________ mixed8 [Concatenate]            [None, None, None, 1 0           activation_72[0][0] activation_76[0][0] max_pooling2d_4[0][0] __________________________________________________________________________________________________ conv2d_81 [Conv2D]              [None, None, None, 4 573440      mixed8[0][0] __________________________________________________________________________________________________ batch_normalization_81 [BatchNo [None, None, None, 4 1344        conv2d_81[0][0] __________________________________________________________________________________________________ activation_81 [Activation]      [None, None, None, 4 0           batch_normalization_81[0][0] __________________________________________________________________________________________________ conv2d_78 [Conv2D]              [None, None, None, 3 491520      mixed8[0][0] __________________________________________________________________________________________________ conv2d_82 [Conv2D]              [None, None, None, 3 1548288     activation_81[0][0] __________________________________________________________________________________________________ batch_normalization_78 [BatchNo [None, None, None, 3 1152        conv2d_78[0][0] __________________________________________________________________________________________________ batch_normalization_82 [BatchNo [None, None, None, 3 1152        conv2d_82[0][0] __________________________________________________________________________________________________ activation_78 [Activation]      [None, None, None, 3 0           batch_normalization_78[0][0] __________________________________________________________________________________________________ activation_82 [Activation]      [None, None, None, 3 0           batch_normalization_82[0][0] __________________________________________________________________________________________________ conv2d_79 [Conv2D]              [None, None, None, 3 442368      activation_78[0][0] __________________________________________________________________________________________________ conv2d_80 [Conv2D]              [None, None, None, 3 442368      activation_78[0][0] __________________________________________________________________________________________________ conv2d_83 [Conv2D]              [None, None, None, 3 442368      activation_82[0][0] __________________________________________________________________________________________________ conv2d_84 [Conv2D]              [None, None, None, 3 442368      activation_82[0][0] __________________________________________________________________________________________________ average_pooling2d_8 [AveragePoo [None, None, None, 1 0           mixed8[0][0] __________________________________________________________________________________________________ conv2d_77 [Conv2D]              [None, None, None, 3 409600      mixed8[0][0] __________________________________________________________________________________________________ batch_normalization_79 [BatchNo [None, None, None, 3 1152        conv2d_79[0][0] __________________________________________________________________________________________________ batch_normalization_80 [BatchNo [None, None, None, 3 1152        conv2d_80[0][0] __________________________________________________________________________________________________ batch_normalization_83 [BatchNo [None, None, None, 3 1152        conv2d_83[0][0] __________________________________________________________________________________________________ batch_normalization_84 [BatchNo [None, None, None, 3 1152        conv2d_84[0][0] __________________________________________________________________________________________________ conv2d_85 [Conv2D]              [None, None, None, 1 245760      average_pooling2d_8[0][0] __________________________________________________________________________________________________ batch_normalization_77 [BatchNo [None, None, None, 3 960         conv2d_77[0][0] __________________________________________________________________________________________________ activation_79 [Activation]      [None, None, None, 3 0           batch_normalization_79[0][0] __________________________________________________________________________________________________ activation_80 [Activation]      [None, None, None, 3 0           batch_normalization_80[0][0] __________________________________________________________________________________________________ activation_83 [Activation]      [None, None, None, 3 0           batch_normalization_83[0][0] __________________________________________________________________________________________________ activation_84 [Activation]      [None, None, None, 3 0           batch_normalization_84[0][0] __________________________________________________________________________________________________ batch_normalization_85 [BatchNo [None, None, None, 1 576         conv2d_85[0][0] __________________________________________________________________________________________________ activation_77 [Activation]      [None, None, None, 3 0           batch_normalization_77[0][0] __________________________________________________________________________________________________ mixed9_0 [Concatenate]          [None, None, None, 7 0           activation_79[0][0] activation_80[0][0] __________________________________________________________________________________________________ concatenate_1 [Concatenate]     [None, None, None, 7 0           activation_83[0][0] activation_84[0][0] __________________________________________________________________________________________________ activation_85 [Activation]      [None, None, None, 1 0           batch_normalization_85[0][0] __________________________________________________________________________________________________ mixed9 [Concatenate]            [None, None, None, 2 0           activation_77[0][0] mixed9_0[0][0] concatenate_1[0][0] activation_85[0][0] __________________________________________________________________________________________________ conv2d_90 [Conv2D]              [None, None, None, 4 917504      mixed9[0][0] __________________________________________________________________________________________________ batch_normalization_90 [BatchNo [None, None, None, 4 1344        conv2d_90[0][0] __________________________________________________________________________________________________ activation_90 [Activation]      [None, None, None, 4 0           batch_normalization_90[0][0] __________________________________________________________________________________________________ conv2d_87 [Conv2D]              [None, None, None, 3 786432      mixed9[0][0] __________________________________________________________________________________________________ conv2d_91 [Conv2D]              [None, None, None, 3 1548288     activation_90[0][0] __________________________________________________________________________________________________ batch_normalization_87 [BatchNo [None, None, None, 3 1152        conv2d_87[0][0] __________________________________________________________________________________________________ batch_normalization_91 [BatchNo [None, None, None, 3 1152        conv2d_91[0][0] __________________________________________________________________________________________________ activation_87 [Activation]      [None, None, None, 3 0           batch_normalization_87[0][0] __________________________________________________________________________________________________ activation_91 [Activation]      [None, None, None, 3 0           batch_normalization_91[0][0] __________________________________________________________________________________________________ conv2d_88 [Conv2D]              [None, None, None, 3 442368      activation_87[0][0] __________________________________________________________________________________________________ conv2d_89 [Conv2D]              [None, None, None, 3 442368      activation_87[0][0] __________________________________________________________________________________________________ conv2d_92 [Conv2D]              [None, None, None, 3 442368      activation_91[0][0] __________________________________________________________________________________________________ conv2d_93 [Conv2D]              [None, None, None, 3 442368      activation_91[0][0] __________________________________________________________________________________________________ average_pooling2d_9 [AveragePoo [None, None, None, 2 0           mixed9[0][0] __________________________________________________________________________________________________ conv2d_86 [Conv2D]              [None, None, None, 3 655360      mixed9[0][0] __________________________________________________________________________________________________ batch_normalization_88 [BatchNo [None, None, None, 3 1152        conv2d_88[0][0] __________________________________________________________________________________________________ batch_normalization_89 [BatchNo [None, None, None, 3 1152        conv2d_89[0][0] __________________________________________________________________________________________________ batch_normalization_92 [BatchNo [None, None, None, 3 1152        conv2d_92[0][0] __________________________________________________________________________________________________ batch_normalization_93 [BatchNo [None, None, None, 3 1152        conv2d_93[0][0] __________________________________________________________________________________________________ conv2d_94 [Conv2D]              [None, None, None, 1 393216      average_pooling2d_9[0][0] __________________________________________________________________________________________________ batch_normalization_86 [BatchNo [None, None, None, 3 960         conv2d_86[0][0] __________________________________________________________________________________________________ activation_88 [Activation]      [None, None, None, 3 0           batch_normalization_88[0][0] __________________________________________________________________________________________________ activation_89 [Activation]      [None, None, None, 3 0           batch_normalization_89[0][0] __________________________________________________________________________________________________ activation_92 [Activation]      [None, None, None, 3 0           batch_normalization_92[0][0] __________________________________________________________________________________________________ activation_93 [Activation]      [None, None, None, 3 0           batch_normalization_93[0][0] __________________________________________________________________________________________________ batch_normalization_94 [BatchNo [None, None, None, 1 576         conv2d_94[0][0] __________________________________________________________________________________________________ activation_86 [Activation]      [None, None, None, 3 0           batch_normalization_86[0][0] __________________________________________________________________________________________________ mixed9_1 [Concatenate]          [None, None, None, 7 0           activation_88[0][0] activation_89[0][0] __________________________________________________________________________________________________ concatenate_2 [Concatenate]     [None, None, None, 7 0           activation_92[0][0] activation_93[0][0] __________________________________________________________________________________________________ activation_94 [Activation]      [None, None, None, 1 0           batch_normalization_94[0][0] __________________________________________________________________________________________________ mixed10 [Concatenate]           [None, None, None, 2 0           activation_86[0][0] mixed9_1[0][0] concatenate_2[0][0] activation_94[0][0] __________________________________________________________________________________________________ global_average_pooling2d_1 [Glo [None, 2048]         0           mixed10[0][0] __________________________________________________________________________________________________ dense_1 [Dense]                 [None, 1024]         2098176     global_average_pooling2d_1[0][0] __________________________________________________________________________________________________ dense_2 [Dense]                 [None, 2]            2050        dense_1[0][0] ================================================================================================== Total params: 23,903,010 Trainable params: 2,100,226 Non-trainable params: 21,802,784 __________________________________________________________________________________________________

Phần train lại sẽ có khoảng hơn 2 triệu tham số, phần layter ở trước đó không train là khoảng 21 triệu tham số.

Đồ hình của model [các bạn có thể download về rồi zoom bự lên để xem rõ hơn].

Chia tập dữ liệu ra thành 5 phần, 4 phần làm tập train, 1 phần làm tập validation.X, y, tags = dataset.dataset[data_directory, n] nb_classes = len[tags] sample_count = len[y] train_size = sample_count * 4 // 5 X_train = X[:train_size] y_train = y[:train_size] Y_train = np_utils.to_categorical[y_train, nb_classes] X_test  = X[train_size:] y_test  = y[train_size:] Y_test = np_utils.to_categorical[y_test, nb_classes]

Để chống overfit, chúng ta sẽ thêm một số yếu tố như thực hiện các phép biến đổi affine trên ảnh gốc.datagen = ImageDataGenerator[ featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, rotation_range=45, width_shift_range=0.25, height_shift_range=0.25, horizontal_flip=True, vertical_flip=False, zoom_range=0.5, channel_shift_range=0.5, fill_mode='nearest'] datagen.fit[X_train]

Cuối cùng, chúng ta sẽ xây dựng mô hình và tiến hành huấn luyện, lưu mô hình. Quá trình này tốn hơi nhiều thời gian. model = net.build_model[nb_classes] model.compile[optimizer='rmsprop', loss='categorical_crossentropy', metrics=["accuracy"]] # train the model on the new data for a few epochs print["training the newly added dense layers"] samples_per_epoch = X_train.shape[0]//batch_size*batch_size steps_per_epoch = samples_per_epoch//batch_size validation_steps = X_test.shape[0]//batch_size*batch_size model.fit_generator[datagen.flow[X_train, Y_train, batch_size=batch_size, shuffle=True], samples_per_epoch=samples_per_epoch, epochs=nb_epoch, steps_per_epoch = steps_per_epoch, validation_data=datagen.flow[X_test, Y_test, batch_size=batch_size], validation_steps=validation_steps, ] net.save[model, tags, model_file_prefix]

Độ chính xác trên tập train.Y_pred = model.predict[X_test, batch_size=batch_size] y_pred = np.argmax[Y_pred, axis=1] accuracy = float[np.sum[y_test==y_pred]] / len[y_test] print["accuracy: ", accuracy] confusion = np.zeros[[nb_classes, nb_classes], dtype=np.int32] for [predicted_index, actual_index, image] in zip[y_pred, y_test, X_test]: confusion[predicted_index, actual_index] += 1 print["rows are predicted classes, columns are actual classes"] for predicted_index, predicted_tag in enumerate[tags]: print[predicted_tag[:7], end='', flush=True] for actual_index, actual_tag in enumerate[tags]: print["\t%d" % confusion[predicted_index, actual_index], end=''] print["", flush=True] accuracy:  0.9907213167661771 rows are predicted classes, columns are actual classes cat     12238   106 dog     124     12320

Kết quả đạt 0.99 trên tập train, khá tốt phải không các bạn.

Các bạn có thể download mô hình mình đã huấn luyện ở //drive.google.com/open?id=1qQo8gj3KA6c1rPmJMVS_FZkVDcDmRgSf.

Thử show ra kết quả trên tập test xem như thế nào.Y_pred = model.predict[X_test, batch_size=batch_size] y_pred = np.argmax[Y_pred, axis=1] lst_img = [] columns = 5 rows = 5 # fig,= plt.figure[rows] for idx, val in enumerate[X_test]: pred =y_pred[idx] label = "{}: {:.2f}%".format[tags[pred], Y_pred[idx][pred] * 100] image = dataset.reverse_preprocess_input[val] image = cv2.cvtColor[image,cv2.COLOR_BGR2RGB] cv2.putText[image,label , [10, 25],  cv2.FONT_HERSHEY_SIMPLEX,0.7, [255, 000, 0], 2] plt.subplot[rows,rows,idx+1] plt.imshow[image] plt.title[label] plt.axis['off'] plt.show[]

Kết quả có một số hình mèo bị nhận nhầm là chó, và một số hình không phải mèo, không phải chó. Nhìn chung kết quả cũng không đến nỗi nào quá tệ.

Quậy phá mô hình

Mô hình InceptionV3 chúng ta đang xài có tổng cộng 311 lớp, chúng ta sẽ tiến hành một số pha quậy phá mô hình xem kết quả như trả ra như thế nào

Quậy phá 1: Mở đóng băng một số lớp cuối và train trên chúng.

Nếu các bạn để ý kỹ, trong đoạn mã nguồn của mình có đoạn# first: train only the top layers [which were randomly initialized] # i.e. freeze all convolutional InceptionV3 layers for layer in base_model.layers: layer.trainable = False

Nghĩa là mình đóng băng toàn bộ 311 lớp, không cho nó train mà chỉ lấy kết quả của nó train lớp softmax cuối cùng. Bây giờ mình sẽ thử nghiệm với việc là để 299 lớp ban đầu vẫn đóng băng, và train lại toàn bộ các lớp còn lại [Các bạn đừng thắc mắc vì sao lại là 299 nha, do mình thích thôi].for layer in model.layers[:299]: layer.trainable = False for layer in model.layers[299:]: layer.trainable = True

Đồ hình của mô đồ khá giống ở trên, mình chỉ post lại kết quả của số param.================================================================================================== Total params: 23,903,010 Trainable params: 2,493,954 Non-trainable params: 21,409,056 __________________________________________________________________________________________________

Như vậy là có khoảng 2 triệu 5 tham số được huấn luyện lại

Model của mình huấn luyện được các bạn có thể download ở //drive.google.com/open?id=1Ts18LICUAh6gcOnXcmuVr7PUG5IxpCdt.

Kết quả đạt được:accuracy:  0.9834610730133119 rows are predicted classes, columns are actual classes cat     2429    69 dog     13      2447

Kết quả 25 hình ngẫu nhiên cũng khá giống kết quả ở trước đó. Một số hình không có con vật bị nhận nhầm như hình còn mèo ở góc phải trên bị nhận nhầm là chó. Tuy nhiên, với chất lượng hình ảnh như thế này thì mình thấy kết quả như vậy là khá tuyệt vời.

Quậy phá 2: Chỉ sử dụng 72 lớp đầu tiên của inception.

Ở lần thí nghiệm này, mình sẽ chỉ sử dụng 72 lớp đầu tiên của inception để huấn luyện. Mình sẽ sửa lại một xíu ở hàm build model như sau:x = base_model.layers[72].output

Một lưu ý nhỏ là do inception không có tính tuần tự giữa các lớp [các bạn có thể nhìn hình ở trên sẽ thấy rõ], nên index sẽ không phải là 72 như thông thường.

Tiếp theo, chúng ta sẽ thực hiện việc huấn luyện lại mô hình và kết quả là:accuracy:  0.5494150867285196 rows are predicted classes, columns are actual classes cat     339     131 dog     2103    2385

Kết quả khá tệ, lý do là mô hình các layer không theo sequence, mình lấy ngẫu nhiêu 72 lớp làm thông tin feature của các hình bị mất mát nhiều [ví dụ trường hợp layey 80 là tổng hợp thông tin của layter 79 + layter 4 + layer 48, mà mình chỉ lấy 72 layter đầu, nên sẽ mất đi phần đóng góp cực kỳ quan trọng của layter 4 và 48 ở lớp cao hơn].

Cảm ơn các bạn đã theo dõi. Hẹn gặp bạn ở các bài viết tiếp theo.Nếu bạn thấy nội dung của bài viết thật sự hữu ích và bạn muốn đóng góp cho blog để có thêm nhiều bài viết chất lượng hơn nữa, các bạn có thể ủng hộ blog bằng một cốc trà hoặc một cốc cà phê nhỏ qua  //nhantien.momo.vn/7abl2tSivGa hoặc paypal.me/tungduypham. Sự ủng hộ của các bạn là nguồn động viên quý giá để chúng tôi có thêm động lực và chia sẻ nhiều điều mà chúng tôi tìm hiểu được đến với cộng đồng. Trân trọng cảm ơn.

Video liên quan

Chủ Đề