Model = Sequential là gì

Keras là gì Keras là một open source cho Neural Network được viết bởi ngôn từ Python. Nó là một library được tăng trưởng vào năm 205 bởi Francois Chollet, là một kỹ sư điều tra và nghiên cứu Deep Learning. Keras hoàn toàn có thể sử dụng chung với những thư viện nổi tiếng như Tensorflow, CNTK, Theano. Một số ưu điểm của Keras như : Dễ sử dụng, dùng đơn thuần hơn Tensor, kiến thiết xây dựng model nhanh. Run được trên cả CPU và GPU.Hỗ trợ thiết kế xây dựng CNN, RNN hoặc cả hai. Với những người mới tiếp cận đến Deep như mình thì mình chọn sử dụng Keras để build model vì nó đơn thuần, dễ chớp lấy hơn những thư viện khác. Dưới đây mình xin trình làng một chút ít về API này .

Models

Trong Keras có tương hỗ 2 cách dựng models là Sequential model và Function API . Đang xem : Keras là gì Xem thêm : Rau Khúc Và Cách Làm Xôi Khúc Đúng Vị TP.HN Ngon Hơn Ngoài Hàng Xem thêm : Server Core Là Gì – Tá » • Ng Quan Vá »  Windows Server Core Với Seqential ta sử dụng như sau : from keras.models import Sequentialfrom keras.layers import Dense, MaxPooling2D, Flatten, Convolution2Dmodel = Sequential [ ] model.add [ Convolution2D [ 32,3,3, input_shape = [ 64,64,3 ], activation = ” relu ” ] ] model.add [ MaxPooling2D [ pool_size = [ 2, 2 ] ] ] model.add [ Flatten [ ] ] model.add [ Dense [ output_dim = 128, activation = ” relu ” ] ] model.add [ Dense [ output_dim = 1, activation = ” sigmoid ” ] ] model.compile [ optimizer = ” adam ”, loss = ” binary_crossentropy ”, metrics = ] model.fit [ x_train, y_train, batch_size = batch_size, epochs = eposhs, verbose = 1, validation_data = [ x_test, y_test ] ] Nội dung đoạn code trên như sau :

Khởi tạo models Sequential [ ] Tạo Convolutionnal Layers : Conv2D là convolution dùng để lấy feature từ ảnh với những tham số : filters : số filter của convolutionkernel_size : kích cỡ window search trên ảnhstrides : số bước nhảy trên ảnhactivation : chọn activation như linear, softmax, relu, tanh, sigmoid. Đặc điểm mỗi hàm những bạn hoàn toàn có thể search thêm để biết đơn cử nó ntn.padding : hoàn toàn có thể là “ valid ” hoặc “ same ”. Với same thì có nghĩa là padding = 1. Pooling Layers : sử dụng để làm giảm param khi train, nhưng vẫn giữ được đặc trưng của ảnh. pool_size : kích cỡ ma trận để lấy max hay averageNgoài ra còn có : MaxPooling2D, AvergaPooling1D, 2D [ lấy max, trung bình ] với từng size. Dense [ ] : Layer này cũng như một layer neural network thông thường, với những tham số sau : units : số chiều output, như số class sau khi train [ chó, mèo, lợn, gà ]. activation : chọn activation đơn thuần với sigmoid thì output có 1 class. use_bias : có sử dụng bias hay không [ True or False ] Hàm compile : Ở hàm này tất cả chúng ta sử dụng để training models như thuật toán train qua optimizer như Adam, SGD, RMSprop, .. learning_rate : dạng float, tốc độc học, chọn tương thích để hàm số quy tụ nhanh. Hàm fit [ ] : Bao gồm data train, test đưa vào training. Batch_size biểu lộ số lượng mẫu mà Mini-batch GD sử dụng cho mỗi lần update trọng số. Epoch là số lần duyệt qua hết số lượng mẫu trong tập huấn luyện. Giả sử ta có tập huấn luyện gồm 55.000 hình ảnh chọn batch-size là 55 images có nghĩa là mỗi lần update trọng số, ta dùng 55 images. Lúc đó ta mất 55.000 / 55 = 1000 iterations [ số lần lặp ] để duyệt qua hết tập huấn luyện [ hoàn thành xong 1 epochs ]. Có nghĩa là khi tài liệu quá lớn, tất cả chúng ta không hề đưa cả tập data vào train được, ta phải chia nhỏ data ra thành nhiều batch nhỏ hơn. Ngoài ra ta hoàn toàn có thể khai báo như sau :

from keras.models import Modelfrom keras.layers import Input, Denseinput = Input[shape = [64,]]output = Dense[32][input]model = Model[input = input, output= output]Tiền xử lýtrain_datagen = ImageDataGenerator[ rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True] test_datagen = ImageDataGenerator[rescale=1./255]Trong Keras có đưa ra các funtion xử lý các loại data như:

Sequence Preprocessing : tiền giải quyết và xử lý chuỗi. TimeseriesGenerrator : tạo data cho time seriespad_sequences : padding những chuỗi có độ dài bằng nhauskipgrams : tạo data trong models skip gram, trả về 2 tuple nếu từ Open cùng nhau, là 1 nếu không có. Text Preprocessing : tiền giải quyết và xử lý textTokenizer : tạo token từ docummentone_hot : tạo data dạng one hot encodingtext_to_word_seqence : convert text thành sequence .. Image Preprocessing : tiền giải quyết và xử lý imageImageDataGenerator : tạo thêm data bằng cách scale, rotation, … để thêm data trainNote

Loss_funtion

mean_squared_eror : thường dùng trong regression tính theo eculidmean_absolute_error : để tính giá trị tuyệt đốibinary_crossentropy : dùng cho classifier 2 classcategorical_crossentropy : dùng classifier nhiều class

Metrics

Để nhìn nhận accuracy của models
binary_accuracy : dùng cho 2 class, nếu y_true = = y_predict thì trả về 1 ngược lại là 0. categorical_accuracy : cũng giống như trên nhưng cho nhiều class

Optimizers

Dùng để chọn thuật toán training
SGD : Stochastic Gradient Descent optimizerRMSpropAdam

Callbacks

Khi models tất cả chúng ta lớn khi training thì gặp lỗi ta muốn lưu lại models để chạy lại thì ta sử dụng callbacks

ModelsCheckpoint : lưu lại model sau mỗi epochEarlyStopping : stop training khi models training không hiệu quảReducaLROnPlateau : giảm learning mỗi khi metrics không cải thiệnVí dụ

Xem thêm: Các dấu câu [Punctuations] trong tiếng Anh và mục đích sử dụng

Chúng ta hãy thử với tập Dataset được cung ứng từ link sau : //www.kaggle.com/c/dogs-vs-cats

import matplotlib.pyplot as pltimport matplotlib.image as mpimgfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequential, Modelfrom keras.optimizers import RMSpropfrom keras.layers import Activation, Dropout, Flatten, Dense, GlobalMaxPooling2D, Conv2D, MaxPooling2Dfrom keras.callbacks import CSVLoggerfrom livelossplot.keras import PlotLossesCallbackimport efficientnet.keras as efnTRAINING_LOGS_FILE = “training_logs.csv”MODEL_SUMMARY_FILE = “model_summary.txt”MODEL_FILE = “cats_vs_dogs.h5″path = “home/thangtd/dataset/cat_dog/”train_data = path + “training”val_data = path + “val”test_data = path +”test”IMAGE_SIZE = 200IMAGE_WIDTH, IMAGE_HEIGHT = IMAGE_SIZE, IMAGE_SIZEEPOCHS = 20BATCH_SIZE = 32TEST_SIZE = 30input_shape = [IMAGE_WIDTH, IMAGE_HEIGHT, 3]model = Sequential[]model.add[Conv2D[32, 3, 3, border_mode=”same”, input_shape=input_shape, activation=”relu”]]model.add[Conv2D[32, 3, 3, border_mode=”same”, activation=”relu”]]model.add[MaxPooling2D[pool_size=[2, 2]]]model.add[Conv2D[64, 3, 3, border_mode=”same”, activation=”relu”]]model.add[Conv2D[64, 3, 3, border_mode=”same”, activation=”relu”]]model.add[MaxPooling2D[pool_size=[2, 2]]]model.add[Conv2D[128, 3, 3, border_mode=”same”, activation=”relu”]]model.add[Conv2D[128, 3, 3, border_mode=”same”, activation=”relu”]]model.add[MaxPooling2D[pool_size=[2, 2]]]model.add[Conv2D[256, 3, 3, border_mode=”same”, activation=”relu”]]model.add[Conv2D[256, 3, 3, border_mode=”same”, activation=”relu”]]model.add[MaxPooling2D[pool_size=[2, 2]]]model.add[Flatten[]]model.add[Dense[256, activation=”relu”]]model.add[Dropout[0.5]]model.add[Dense[256, activation=”relu”]]model.add[Dropout[0.5]]model.add[Dense[1]]model.add[Activation[“sigmoid”]]model.compile[loss=”binary_crossentropy”, optimizer=RMSprop[lr=0.0001], metrics=]with open[MODEL_SUMMARY_FILE,”w”] as fh: model.summary[print_fn=lambda line: fh.write[line + ”
“]] # Data augmentationtraining_data_generator = ImageDataGenerator[ rescale=1./255, shear_range=0.1, zoom_range=0.1, horizontal_flip=True]validation_data_generator = ImageDataGenerator[rescale=1./255]test_data_generator = ImageDataGenerator[rescale=1./255]training_generator = training_data_generator.flow_from_directory[ train_data_dir, target_size=[IMAGE_WIDTH, IMAGE_HEIGHT], batch_size=BATCH_SIZE, class_mode=”binary”]validation_generator = validation_data_generator.flow_from_directory[ val_data_dir, target_size=[IMAGE_WIDTH, IMAGE_HEIGHT], batch_size=BATCH_SIZE, class_mode=”binary”]test_generator = test_data_generator.flow_from_directory[ test_data_dir, target_size=[IMAGE_WIDTH, IMAGE_HEIGHT], batch_size=1, class_mode=”binary”, shuffle=False] # Trainingmodel.fit_generator[ training_generator, steps_per_epoch=len[training_generator.filenames] // BATCH_SIZE, epochs=EPOCHS, validation_data=validation_generator, validation_steps=len[validation_generator.filenames] // BATCH_SIZE, callbacks=, verbose=1]model.save_weights[MODEL_FILE]Sử dụng model.summary [] để xem ntn :


Mọi người hoàn toàn có thể tự mình build model như bên trên và predict thử xem hiệu quả thế nào nhé ! ! ! !

Source: //chickgolden.com
Category: Hỏi đáp

Đăng bởi: Admin | Lượt xem: 1078 | Chuyên mục: AI

Như ta đã tìm hiểu trong các bài trước, mô hình Keras đại diện cho mô hình mạng nơron thực tế. Keras cung cấp hai chế độ để tạo mô hình, API tuần tự đơn giản và dễ sử dụng cũng như API chức năng linh hoạt và nâng cao hơn. Bây giờ ta hãy học cách tạo mô hình bằng cách sử dụng cả API tuần tự và hàm trong chương này.

Ý tưởng cốt lõi của Sequential API chỉ đơn giản là sắp xếp các lớp Keras theo thứ tự tuần tự và vì vậy, nó được gọi là Sequential API. Hầu hết ANN cũng có các lớp theo thứ tự tuần tự và dữ liệu chảy từ lớp này sang lớp khác theo thứ tự nhất định cho đến khi dữ liệu cuối cùng đến lớp đầu ra.

Mô hình ANN có thể được tạo bằng cách chỉ cần gọi API Sequential [] như sau :

from keras.models import Sequential model = Sequential[]

Để thêm layer, chỉ cần tạo một lớp bằng API lớp Keras và sau đó chuyển layer qua hàm add [] như sau :

from keras.models import Sequential model = Sequential[] input_layer = Dense[32, input_shape=[8,]] model.add[input_layer] hidden_layer = Dense[64, activation='relu']; model.add[hidden_layer] output_layer = Dense[8] model.add[output_layer]

Ở đây, ta đã tạo một input, một hiden và một output.

Keras cung cấp một số phương pháp để lấy thông tin mô hình như các layer, dữ liệu đầu vào và dữ liệu đầu ra như sau :

  • model.layers - Trả về tất cả các lớp của mô hình dưới dạng danh sách.

>>> layers = model.layers >>> layers [ , ]

  • model.inputs - Trả về tất cả các tensors đầu vào của mô hình dưới dạng danh sách.

>>> inputs = model.inputs >>> inputs []

  • model.outputs - Trả về tất cả các tensors đầu ra của mô hình dưới dạng danh sách.

>>> outputs = model.outputs >>> outputs ]

  • model.get_weights − Trả về tất cả các trọng số dưới dạng mảng NumPy.
  • model.set_weights[weight_numpy_array] − Đặt trọng số của mô hình.

Keras cung cấp các phương thức để tuần tự hóa mô hình thành đối tượng cũng như json và tải lại sau đó:

  • get_config [] - Trả về mô hình dưới dạng một đối tượng.

config = model.get_config[]

  • from_config [] - Nó chấp nhận đối tượng cấu hình mô hình làm đối số và tạo mô hình tương ứng.

new_model = Sequential.from_config[config]

  • to_json [] - Trả về mô hình dưới dạng một đối tượng json.

>>> json_string = model.to_json[] >>> json_string '{"class_name": "Sequential", "config": {"name": "sequential_10", "layers": [{"class_name": "Dense", "config": {"name": "dense_13", "trainable": true, "batch_input_shape": [null, 8], "dtype": "float32", "units": 32, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "Vari anceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "conf ig": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {" class_name": "Dense", "config": {"name": "dense_14", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kern el_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initia lizer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint" : null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_15", "trainable": true, "dtype": "float32", "units": 8, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": " uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_r egularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "keras_version": "2.2.5", "backend": "tensorflow"}' >>>

  • model_from_json [] - Chấp nhận biểu diễn json của mô hình và tạo một mô hình mới.

from keras.models import model_from_json new_model = model_from_json[json_string]

  • to_yaml [] - Trả về mô hình dưới dạng một chuỗi yaml.

>>> yaml_string = model.to_yaml[] >>> yaml_string 'backend: tensorflow\nclass_name: Sequential\nconfig:\n layers:\n - class_name: Dense\n config:\n activation: linear\n activity_regular izer: null\n batch_input_shape: !!python/tuple\n - null\n - 8\n bias_constraint: null\n bias_initializer:\n class_name : Zeros\n config: {}\n bias_regularizer: null\n dtype: float32\n kernel_constraint: null\n kernel_initializer:\n cla ss_name: VarianceScaling\n config:\n distribution: uniform\n mode: fan_avg\n scale: 1.0\n seed: null\n kernel_regularizer: null\n name: dense_13\n trainable: true\n units: 32\n use_bias: true\n - class_name: Dense\n config:\n activation: relu\n activity_regularizer: null\n bias_constraint: null\n bias_initializer:\n class_name: Zeros\n config : {}\n bias_regularizer: null\n dtype: float32\n kernel_constraint: null\n kernel_initializer:\n class_name: VarianceScalin g\n config:\n distribution: uniform\n mode: fan_avg\n scale: 1.0\n seed: null\n kernel_regularizer: nu ll\n name: dense_14\n trainable: true\n units: 64\n use_bias: true\n - class_name: Dense\n config:\n activation: linear\n activity_regularizer: null\n bias_constraint: null\n bias_initializer:\n class_name: Zeros\n config: {}\n bias_regu larizer: null\n dtype: float32\n kernel_constraint: null\n kernel_initializer:\n class_name: VarianceScaling\n config:\n distribution: uniform\n mode: fan_avg\n scale: 1.0\n seed: null\n kernel_regularizer: null\n name: dense _15\n trainable: true\n units: 8\n use_bias: true\n name: sequential_10\nkeras_version: 2.2.5\n' >>>

  • model_from_yaml [] - Chấp nhận biểu diễn yaml của mô hình và tạo một mô hình mới.

from keras.models import model_from_yaml new_model = model_from_yaml[yaml_string]

Hiểu được mô hình là giai đoạn rất quan trọng để sử dụng đúng cách cho mục đích đào tạo và dự đoán. Keras cung cấp một phương pháp đơn giản, tóm tắt để có được thông tin đầy đủ về mô hình và các layer.

Tóm tắt về mô hình được tạo trong phần trước như sau:

>>> model.summary[] Model: "sequential_10" _________________________________________________________________ Layer [type] Output Shape Param #================================================================ dense_13 [Dense] [None, 32] 288 _________________________________________________________________ dense_14 [Dense] [None, 64] 2112 _________________________________________________________________ dense_15 [Dense] [None, 8] 520 ================================================================= Total params: 2,920 Trainable params: 2,920 Non-trainable params: 0 _________________________________________________________________ >>>

Mô hình cung cấp chức năng cho quá trình huấn luyện, đánh giá và dự đoán như sau

  • compile − Định cấu hình quá trình học tập của mô hình
  • fit − Đào tạo mô hình bằng cách sử dụng dữ liệu đào tạo
  • evaluate − Đánh giá mô hình bằng cách sử dụng dữ liệu test
  • predict − Dự đoán kết quả với dữ liệu đầu vào mới

API tuần tự được sử dụng để tạo mô hình theo từng lớp.Functional API  là một cách tiếp cận thay thế để tạo ra các mô hình phức tạp hơn. Mô hình Functional, bạn có thể xác định nhiều đầu vào hoặc đầu ra chia sẻ các lớp. Đầu tiên, chúng ta tạo một thể hiện cho mô hình và kết nối với các lớp để truy cập đầu vào và đầu ra của mô hình. Sau đây giải thích ngắn gọn về mô hình chức năng.

Import 1 layer input:

>>> from keras.layers import Input

Tạo một layer đầu vào chỉ định hình dạng kích thước đầu vào cho mô hình như sau:

>>> data = Input[shape=[2,3]]

Xác định layer đầu vào :

>>> from keras.layers import Dense

Thêm layer Dense cho dữ liệu đầu vào :

>>> layer = Dense[2][data] >>> print[layer] Tensor["dense_1/add:0", shape =[?, 2, 2], dtype = float32]

Xác định Model:

from keras.models import Model

Tạo một mô hình bằng cách chỉ định cả lớp đầu vào và đầu ra -

model = Model[inputs = data, outputs = layer]

Toàn bộ code quá trình tạo model đơn giản như sau :

from keras.layers import Input from keras.models import Model from keras.layers import Dense data = Input[shape=[2,3]] layer = Dense[2][data] model = Model[inputs=data,outputs=layer] model.summary[] _________________________________________________________________ Layer [type] Output Shape Param # ================================================================= input_2 [InputLayer] [None, 2, 3] 0 _________________________________________________________________ dense_2 [Dense] [None, 2, 2] 8 ================================================================= Total params: 8 Trainable params: 8 Non-trainable params: 0 _________________________________________________________________

Video liên quan

Chủ Đề