提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
前言
提示 面對(duì)水果識(shí)別系統(tǒng)Python,基于TensorFlow卷積神經(jīng)網(wǎng)絡(luò)算---深度學(xué)習(xí)算法:
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、項(xiàng)目含義背景
果蔬識(shí)別系統(tǒng),使用Python作為主要開發(fā)語言,使用深度學(xué)習(xí) TensorFLOw框架,Django框架,搭建卷積神經(jīng)網(wǎng)絡(luò)算法,并通過對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,最后得到一個(gè)識(shí)別精度較高的模型,并且使用網(wǎng)站網(wǎng)頁端操作平臺(tái),實(shí)現(xiàn)用戶上傳一張圖片識(shí)別。
二、數(shù)據(jù)集
1:使用的是CIFAR-10數(shù)據(jù)集, 包含10個(gè)類別的60000張像素的彩色圖像集。
三、讀取數(shù)據(jù)——預(yù)處理
1:讀取數(shù)據(jù)
代碼如下(示例):
- 導(dǎo)入 pathlib-----pathlib 模塊提供了表示文件系統(tǒng)路徑的類,可適用于不同的操作系統(tǒng)。使用 pathlib 模塊,相比于 os 模塊可以寫出更簡潔,易讀的代碼。
import pathlib
data_dir = "./dataset/"
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*')))
print("圖片總數(shù)為:",image_count)
2.數(shù)據(jù)處理調(diào)配
batch_size = 12
img_height = 224
img_width = 224
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=12,
image_size=(img_height, img_width),
batch_size=batch_size)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=12,
image_size=(img_height, img_width),
batch_size=batch_size)
class_names = train_ds.class_names
print("數(shù)據(jù)類別有:",class_names)
2.檢查數(shù)據(jù)
for image_batch, labels_batch in train_ds:
print(image_batch.shape)
print(labels_batch.shape)
break
3.配置數(shù)據(jù)集
AUTOTUNE = tf.data.AUTOTUNE
def train_preprocessing(image,label):
return (image/255.0,label)
train_ds = (
train_ds.cache()
# .shuffle(2000)
.map(train_preprocessing) # 這里可以設(shè)置預(yù)處理函數(shù)
# .batch(batch_size) # 在image_dataset_from_directory處已經(jīng)設(shè)置了batch_size
.prefetch(buffer_size=AUTOTUNE)
)
val_ds = (
val_ds.cache()
# .shuffle(2000)
.map(train_preprocessing) # 這里可以設(shè)置預(yù)處理函數(shù)
# .batch(batch_size) # 在image_dataset_from_directory處已經(jīng)設(shè)置了batch_size
.prefetch(buffer_size=AUTOTUNE)
)
四.網(wǎng)絡(luò)結(jié)構(gòu)
框架 | 作用 |
---|---|
tensorflow | Tensorflow是一個(gè)編程系統(tǒng),使用圖(graphs)來表示計(jì)算任務(wù),圖(graphs)中的節(jié)點(diǎn)稱之為op(operation |
Django | Django 是用Python開發(fā)的一個(gè)免費(fèi)開源的Web框架,可以用于快速搭建高性能,優(yōu)雅的網(wǎng)站!采用了MVC的框架模式,即模型M,視圖V和控制器C,也可以稱為MVT模式,模型M,視圖V,模板T |
- 網(wǎng)絡(luò)結(jié)構(gòu)圖:
1.數(shù)字圖像識(shí)別主要是在計(jì)算機(jī)視覺的基礎(chǔ)上,通過收集圖像的輪廓、特征、色彩、紋理等信息來進(jìn)行識(shí)別。一般的圖像識(shí)別流程如圖所示。
2.水果識(shí)別的設(shè)計(jì)主要分為六大步驟,具體的流程圖如圖所示
3.調(diào)用預(yù)訓(xùn)練的ResNet50模型并在新的數(shù)據(jù)集上進(jìn)行訓(xùn)練和識(shí)別。這里我們將使用CIFAR-10數(shù)據(jù)集,一個(gè)包含10個(gè)類別的60000張32x32像素的彩色圖像集。(部分代碼)
<1>我們定義了一個(gè)模型,其中包括預(yù)訓(xùn)練的ResNet50模型和一些額外的全連接層。這些全連接層是用來根據(jù)我們的新任務(wù)(在這個(gè)例子中是CIFAR-10分類)來學(xué)習(xí)特定的特征。我們指定ResNet50模型的權(quán)重來自Imagenet預(yù)訓(xùn)練,并且不包括頂部的全連接層(因?yàn)槲覀円砑幼约旱娜B接層)。
# 構(gòu)建模型
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(32, 32, 3))
model = models.Sequential()
model.add(base_model)
model.add(layers.Flatten())
model.add(layers.Dense(1024, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(10, activation='softmax')) # 這里的 10 是 CIFAR10 數(shù)據(jù)集的類別數(shù)量
# 凍結(jié)預(yù)訓(xùn)練模型的卷積層,避免在訓(xùn)練過程中破壞預(yù)訓(xùn)練的權(quán)重
for layer in base_model.layers:
layer.trainable = False
五.模型的訓(xùn)練
1.損失函數(shù)(loss function)或 代價(jià)函數(shù) (cost function)是將隨機(jī)事件或其有關(guān)隨機(jī)變量的取值映射為非負(fù)實(shí)數(shù)以表示該隨機(jī)事件的“風(fēng)險(xiǎn)”或“損失”的函數(shù)。
2.在定義了模型結(jié)構(gòu)之后,我們編譯模型,指定優(yōu)化器、損失函數(shù)和評(píng)價(jià)指標(biāo)。(如下代碼)
# 構(gòu)建模型
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(32, 32, 3))
model = models.Sequential()
model.add(base_model)
model.add(layers.Flatten())
model.add(layers.Dense(1024, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(10, activation='softmax')) # 這里的 10 是 CIFAR10 數(shù)據(jù)集的類別數(shù)量
# 凍結(jié)預(yù)訓(xùn)練模型的卷積層,避免在訓(xùn)練過程中破壞預(yù)訓(xùn)練的權(quán)重
for layer in base_model.layers:
layer.trainable = False
# 編譯模型
model.compile(optimizer=optimizers.Adam(),
loss='categorical_crossentropy',
metrics=['accuracy'])
# 訓(xùn)練模型
history = model.fit(train_images, train_labels,
validation_data=(test_images, test_labels),
batch_size=64,
epochs=5)
# 評(píng)估模型
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
3.接著,我們使用訓(xùn)練數(shù)據(jù)和標(biāo)簽對(duì)模型進(jìn)行訓(xùn)練,設(shè)置了批量大小和訓(xùn)練輪數(shù),并使用驗(yàn)證數(shù)據(jù)集對(duì)模型進(jìn)行驗(yàn)證。
4.訓(xùn)練完成后,我們?cè)跍y(cè)試集上評(píng)估模型的性能,打印出測(cè)試集上的精度。
六.成品展示
1.代碼運(yùn)行
2.基于Django框架,開發(fā)網(wǎng)頁端操作平臺(tái)----預(yù)測(cè)
3.后臺(tái)管理----數(shù)據(jù)庫存儲(chǔ)文章來源:http://www.zghlxwxcb.cn/news/detail-795556.html
總結(jié)
提示:本文章只用于參考,謝謝鑒賞。文章來源地址http://www.zghlxwxcb.cn/news/detail-795556.html
到了這里,關(guān)于水果識(shí)別系統(tǒng)Python,基于TensorFlow卷積神經(jīng)網(wǎng)絡(luò)算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!