Computer >> Máy Tính >  >> Lập trình >> Python

Có thể coi một mô hình Keras chỉ là một lớp và được gọi bằng Python không? Nếu có, hãy chứng minh điều đó

Tensorflow là một khuôn khổ học máy được cung cấp bởi Google. Nó là một khung công tác mã nguồn mở được sử dụng kết hợp với Python để triển khai các thuật toán, ứng dụng học sâu và hơn thế nữa. Nó được sử dụng trong nghiên cứu và cho mục đích sản xuất.

Keras được phát triển như một phần nghiên cứu của dự án ONEIROS (Hệ điều hành Robot thông minh điện tử thần kinh mở). Keras là một API học sâu, được viết bằng Python. Đây là một API cấp cao có giao diện hiệu quả giúp giải quyết các vấn đề về máy học. Nó chạy trên khuôn khổ Tensorflow. Nó được xây dựng để giúp thử nghiệm một cách nhanh chóng. Nó cung cấp các khối xây dựng và trừu tượng thiết yếu cần thiết trong việc phát triển và đóng gói các giải pháp học máy.

Nó có khả năng mở rộng cao và đi kèm với các khả năng đa nền tảng. Điều này có nghĩa là Keras có thể chạy trên TPU hoặc các cụm GPU. Các mô hình Keras cũng có thể được xuất để chạy trong trình duyệt web hoặc điện thoại di động.

Keras đã có trong gói Tensorflow. Nó có thể được truy cập bằng cách sử dụng dòng mã dưới đây.

import tensorflow
from tensorflow import keras

Có, một mô hình Keras chỉ được coi như một lớp và được gọi bằng Python. API chức năng Keras giúp tạo các mô hình linh hoạt hơn so với các mô hình được tạo bằng API tuần tự. API chức năng có thể hoạt động với các mô hình có cấu trúc liên kết phi tuyến tính, có thể chia sẻ các lớp và hoạt động với nhiều đầu vào và đầu ra. Mô hình học sâu thường là một đồ thị xoay chiều có hướng (DAG) chứa nhiều lớp. API chức năng giúp xây dựng biểu đồ của các lớp.

Chúng tôi đang sử dụng Google Colaboratory để chạy đoạn mã dưới đây. Google Colab hoặc Colaboratory giúp chạy mã Python qua trình duyệt và không yêu cầu cấu hình cũng như quyền truy cập miễn phí vào GPU (Đơn vị xử lý đồ họa). Colaboratory đã được xây dựng trên Jupyter Notebook. Sau đây là đoạn mã để coi mô hình Keras như một lớp và được gọi bằng Python -

Ví dụ

Encoder_input = keras.Input(shape=(28, 28, 1), name=”original_img”)
print("Adding layers to the model")
x = layers.Conv2D(16, 3, activation="relu")(encoder_input)
x = layers.Conv2D(32, 3, activation="relu")(x)
x = layers.MaxPooling2D(3)(x)
x = layers.Conv2D(32, 3, activation="relu")(x)
x = layers.Conv2D(16, 3, activation="relu")(x)
print("Performing golbal max pooling")
encoder_output = layers.GlobalMaxPooling2D()(x)

print("Creating a model using the layers")
encoder = keras.Model(encoder_input, encoder_output, name="encoder")
print("More information about the model")
encoder.summary()
decoder_input = keras.Input(shape=(16,), name="encoded_img")
print("Reshaping the layers in the model")
x = layers.Reshape((4, 4, 1))(decoder_input)
x = layers.Conv2DTranspose(16, 3, activation="relu")(x)
x = layers.Conv2DTranspose(32, 3, activation="relu")(x)
x = layers.UpSampling2D(3)(x)
x = layers.Conv2DTranspose(16, 3, activation="relu")(x)
decoder_output = layers.Conv2DTranspose(1, 3, activation="relu")(x)
print("Creating a model using the layers")
decoder = keras.Model(decoder_input, decoder_output, name="decoder")
print("More information about the model")
decoder.summary()

autoencoder_input = keras.Input(shape=(28, 28, 1), name="img")
encoded_img = encoder(autoencoder_input)
decoded_img = decoder(encoded_img)
autoencoder = keras.Model(autoencoder_input, decoded_img, name="autoencoder")
print("More information about the model")
autoencoder.summary()

Tín dụng mã - https://www.tensorflow.org/guide/keras/f Chức năng

Đầu ra

original_img (InputLayer)    [(None, 28, 28, 1)]       0
_________________________________________________________________
conv2d_28 (Conv2D)          (None, 26, 26, 16)       160
_________________________________________________________________
conv2d_29 (Conv2D)          (None, 24, 24, 32)       4640
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 8, 8, 32)          0
_________________________________________________________________
conv2d_30 (Conv2D)          (None, 6, 6, 32)          9248
_________________________________________________________________
conv2d_31 (Conv2D)          (None, 4, 4, 16)          4624
_________________________________________________________________
global_max_pooling2d_3       (Glob (None, 16)          0
=================================================================
Total params: 18,672
Trainable params: 18,672
Non-trainable params: 0
_________________________________________________________________
Reshaping the layers in the model
Creating a model using the layers
More information about the model
Model: "decoder"
_________________________________________________________________
Layer (type)                Output Shape             Param #
=================================================================
encoded_img (InputLayer)    [(None, 16)]             0
_________________________________________________________________
reshape_1 (Reshape)          (None, 4, 4, 1)         0
_________________________________________________________________
conv2d_transpose_4 (Conv2DTr (None, 6, 6, 16)       160
_________________________________________________________________
conv2d_transpose_5 (Conv2DTr (None, 8, 8, 32)       4640
_________________________________________________________________
up_sampling2d_1 (UpSampling2 (None, 24, 24, 32)       0
_________________________________________________________________
conv2d_transpose_6 (Conv2DTr (None, 26, 26, 16)      4624
_________________________________________________________________
conv2d_transpose_7 (Conv2DTr (None, 28, 28, 1)       145
=================================================================
Total params: 9,569
Trainable params: 9,569
Non-trainable params: 0
_________________________________________________________________
More information about the model
Model: "autoencoder"
_________________________________________________________________
Layer (type)             Output Shape          Param #
=================================================================
img (InputLayer)       [(None, 28, 28, 1)]       0
_________________________________________________________________
encoder (Functional)    (None, 16)             18672
_________________________________________________________________
decoder (Functional)    (None, 28, 28, 1)       9569
=================================================================
Total params: 28,241
Trainable params: 28,241
Non-trainable params: 0
_________________________________________________________________

Giải thích

  • Bất kỳ mô hình nào cũng có thể được coi là một lớp bằng cách gọi nó trên một "đầu vào" hoặc đầu ra của một lớp khác.

  • Khi mô hình được gọi, kiến ​​trúc đang được sử dụng lại.

  • Ngoài ra, các quả cân cũng đang được tái sử dụng.

  • Mô hình tự động mã hóa có thể được tạo bằng cách sử dụng mô hình bộ mã hóa, một mô hình bộ giải mã.

  • Hai mô hình này được liên kết với nhau thành hai lệnh gọi để lấy mô hình tự động mã hóa.