Hướng dẫn cnn image classification python keras - cnn phân loại hình ảnh python keras

Hướng dẫn này thể hiện đào tạo một mạng lưới thần kinh tích chập đơn giản (CNN) để phân loại hình ảnh CIFAR. Bởi vì hướng dẫn này sử dụng API tuần tự Keras, việc tạo và đào tạo mô hình của bạn sẽ chỉ lấy một vài dòng mã.

Nhập khẩu tenorflow

import tensorflow as tf

from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

Tải xuống và chuẩn bị bộ dữ liệu CIFAR10

Bộ dữ liệu CIFAR10 chứa 60.000 hình ảnh màu trong 10 lớp, với 6.000 hình ảnh trong mỗi lớp. Bộ dữ liệu được chia thành 50.000 hình ảnh đào tạo và 10.000 hình ảnh thử nghiệm. Các lớp là loại trừ lẫn nhau và không có sự chồng chéo giữa chúng.

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 11s 0us/step
170508288/170498071 [==============================] - 11s 0us/step

Xác minh dữ liệu

Để xác minh rằng bộ dữ liệu có vẻ chính xác, hãy vẽ vẽ 25 hình ảnh đầu tiên từ bộ đào tạo và hiển thị tên lớp bên dưới mỗi hình ảnh:

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
               'dog', 'frog', 'horse', 'ship', 'truck']

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i])
    # The CIFAR labels happen to be arrays, 
    # which is why you need the extra index
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()

Hướng dẫn cnn image classification python keras - cnn phân loại hình ảnh python keras

Tạo cơ sở tích chập

6 dòng mã bên dưới xác định cơ sở tích chập bằng cách sử dụng một mẫu chung: một ngăn xếp các lớp Conv2D và MaxPooling2D.

Là đầu vào, CNN lấy các tenxơ hình dạng (Image_Height, Image_Width, Color_Channels), bỏ qua kích thước lô. Nếu bạn chưa quen với các kích thước này, Color_Channels đề cập đến (R, G, B). Trong ví dụ này, bạn sẽ định cấu hình CNN của mình để xử lý các đầu vào có hình dạng (32, 32, 3), là định dạng của hình ảnh CIFAR. Bạn có thể làm điều này bằng cách chuyển đối số

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
6 cho lớp đầu tiên của bạn.

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

Hãy hiển thị kiến ​​trúc của mô hình của bạn cho đến nay:

model.summary()
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 30, 30, 32)        896       
                                                                 
 max_pooling2d (MaxPooling2D  (None, 15, 15, 32)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 13, 13, 64)        18496     
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 6, 6, 64)         0         
 2D)                                                             
                                                                 
 conv2d_2 (Conv2D)           (None, 4, 4, 64)          36928     
                                                                 
=================================================================
Total params: 56,320
Trainable params: 56,320
Non-trainable params: 0
_________________________________________________________________

Ở trên, bạn có thể thấy rằng đầu ra của mỗi lớp Conv2D và MaxPooling2D là một tenxor 3D có hình dạng (chiều cao, chiều rộng, kênh). Kích thước chiều rộng và chiều cao có xu hướng thu nhỏ khi bạn đi sâu hơn trong mạng. Số lượng kênh đầu ra cho mỗi lớp Conv2D được kiểm soát bởi đối số đầu tiên (ví dụ: 32 hoặc 64). Thông thường, khi chiều rộng và chiều cao co lại, bạn có thể đủ khả năng (tính toán) để thêm nhiều kênh đầu ra trong mỗi lớp Conv2D.

Thêm các lớp dày đặc trên đầu

Để hoàn thành mô hình, bạn sẽ cung cấp tenxơ đầu ra cuối cùng từ cơ sở tích chập (có hình dạng (4, 4, 64))) thành một hoặc nhiều lớp dày đặc để thực hiện phân loại. Các lớp dày đặc lấy các vectơ làm đầu vào (là 1D), trong khi đầu ra hiện tại là tenxơ 3D. Đầu tiên, bạn sẽ làm phẳng (hoặc không cuộn) đầu ra 3D thành 1D, sau đó thêm một hoặc nhiều lớp dày đặc trên đầu. CIFAR có 10 lớp đầu ra, vì vậy bạn sử dụng lớp dày đặc cuối cùng với 10 đầu ra.

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

Đây là kiến ​​trúc hoàn chỉnh của mô hình của bạn:

model.summary()
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 30, 30, 32)        896       
                                                                 
 max_pooling2d (MaxPooling2D  (None, 15, 15, 32)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 13, 13, 64)        18496     
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 6, 6, 64)         0         
 2D)                                                             
                                                                 
 conv2d_2 (Conv2D)           (None, 4, 4, 64)          36928     
                                                                 
 flatten (Flatten)           (None, 1024)              0         
                                                                 
 dense (Dense)               (None, 64)                65600     
                                                                 
 dense_1 (Dense)             (None, 10)                650       
                                                                 
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0
_________________________________________________________________

Tóm tắt mạng cho thấy các đầu ra (4, 4, 64) được làm phẳng thành các vectơ hình dạng (1024) trước khi trải qua hai lớp dày đặc.

Biên dịch và đào tạo mô hình

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
0
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
1

Đánh giá mô hình

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
2
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
3

Hướng dẫn cnn image classification python keras - cnn phân loại hình ảnh python keras

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
4
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
5

CNN đơn giản của bạn đã đạt được độ chính xác của thử nghiệm trên 70%. Không tệ cho một vài dòng mã! Đối với một kiểu CNN khác, hãy xem TensorFlow 2 QuickStart cho các chuyên gia ví dụ sử dụng API phân lớp Keras và

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
7.

Làm cách nào để sử dụng phân loại hình ảnh CNN trong Python?

Trình phân loại hình ảnh bằng CNN ..
Python | Phân loại hình ảnh bằng cách sử dụng Keras ..
keras.fit () và keras.fit_generator ().
Lớp keras.conv2d ..
Cnn | Giới thiệu về lớp gộp ..
Cnn | Giới thiệu về đệm ..
Áp dụng mạng thần kinh tích chập trên bộ dữ liệu MNIST ..
Chức năng kích hoạt trong mạng lưới thần kinh ..

Chúng ta có thể sử dụng CNN để phân loại hình ảnh không?

CNN là viết tắt của Mạng thần kinh tích chập, một mạng thần kinh chuyên dụng để xử lý dữ liệu có hình dạng đầu vào như ma trận 2D như hình ảnh.CNN thường được sử dụng để phát hiện và phân loại hình ảnh.CNN's are typically used for image detection and classification.

CNN nào là tốt nhất để phân loại hình ảnh?

Các mạng thần kinh kết hợp phổ biến nhất để phát hiện đối tượng và phân loại danh mục đối tượng từ hình ảnh là Alex Nets, Googlenet và Resnet50.Một loạt các bộ dữ liệu hình ảnh có sẵn để kiểm tra hiệu suất của các loại CNN khác nhau.Alex Nets, GoogLeNet, and ResNet50. A variety of image data sets are available to test the performance of different types of CNN's.

Làm thế nào để bạn sử dụng phân loại hình ảnh keras?

Phân loại hình ảnh..
Trên trang này..
Setup..
Tải xuống và khám phá bộ dữ liệu ..
Tải dữ liệu bằng tiện ích Keras.Tạo một bộ dữ liệu ..
Hình dung dữ liệu ..
Định cấu hình bộ dữ liệu cho hiệu suất ..
Chuẩn hóa dữ liệu ..
Một mô hình keras cơ bản.Tạo mô hình.Biên dịch mô hình.Tóm tắt mô hình.Đào tạo mô hình ..