VGG16 CIFAR10分類的實現

2021-09-26 15:56:50 字數 3481 閱讀 3148

import numpy as np

import tensorflow as tf

import os

import pickle

from keras.utils import np_utils

cifar_path = r』d:\python\mnist_data\cifar-10-batches-py』

def load_data(file):

with open(file, 『rb』) as f:

data = pickle.load(f, encoding=『bytes』)

return data[b』data』], data[b』labels』]

n_classes = 10

train_filename = [os.path.join(cifar_path, 『data_batch_%d』 % i) for i in range(1, 6)]

test_filename = [os.path.join(cifar_path, 『test_batch』)]

train_data, train_label = cifar(train_filename)

train_label = np_utils.to_categorical(train_label, n_classes)

test_data, test_label = cifar(test_filename)

test_label = np_utils.to_categorical(test_label, n_classes)

print(train_data.shape[1], test_label.shape)

x = tf.placeholder(dtype=tf.float32, shape=([none, train_data.shape[1]]))

y = tf.placeholder(dtype=tf.int64, shape=([none,10]))

input_x = tf.reshape(x, [-1, 3, 32, 32])

images = tf.transpose(input_x, perm=[0, 2, 3, 1])

conv1_1 = tf.layers.conv2d(inputs=images, filters=32, kernel_size=(3, 3), strides=1, padding=『same』,

activation=tf.nn.relu)

conv1_2 = tf.layers.conv2d(conv1_1,

32, # 輸出的通道數(也就是卷積核的數量)

(3, 3), # 卷積核大小

padding=『same』,

activation=tf.nn.relu)

pooling1 = tf.layers.max_pooling2d(conv1_2,

(2, 2), # 核大小

(2, 2), # 步長

)conv2_1 = tf.layers.conv2d(pooling1,

32, # 輸出的通道數

(3, 3), # 卷積核大小

padding=『same』,

activation=tf.nn.relu,

)conv2_2 = tf.layers.conv2d(conv2_1,

32, # 輸出的通道數

(3, 3), # 卷積核大小

padding=『same』,

activation=tf.nn.relu,

)pooling2 = tf.layers.max_pooling2d(conv2_2,

(2, 2), # 核大小

(2, 2), # 步長

)conv3_1 = tf.layers.conv2d(pooling2,

32, # 輸出的通道數

(3, 3), # 卷積核大小

padding=『same』,

activation=tf.nn.relu,

)conv3_2 = tf.layers.conv2d(conv3_1,

32, # 輸出的通道數

(3, 3), # 卷積核大小

padding=『same』,

activation=tf.nn.relu,

)pooling3 = tf.layers.max_pooling2d(conv3_2,

(2, 2), # 核大小

(2, 2), # 步長

)flatten = tf.contrib.layers.flatten(pooling3)

y_out = tf.layers.dense(flatten, 10)

loss = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=y_out)

correct_prediction = tf.equal(tf.argmax(y_out, 1), tf.argmax(y, 1))

acc = tf.reduce_mean(tf.cast(correct_prediction, dtype=tf.float32))

train_opt = tf.train.adamoptimizer(0.001).minimize(loss)

epoch = 150

batch_size = 20

with tf.session() as sess:

sess.run(tf.global_variables_initializer())

for i in range(epoch + 1):

# train_images, train_label = shuffle_data(train_data, train_label)

#這裡呼叫另乙個打亂資料集的函式好一寫

for k in range(0, len(train_label), batch_size):

image_batch = train_images[k:k + batch_size]

label_batch = train_label[k:k + batch_size]

sess.run([train_opt], feed_dict=)

test_acc = sess.run(acc, feed_dict=)

print(「第」 + str(i) + 「輪測試」 + 「精度為:」 + str(test_acc))

#測試結果:精度不高,怕是應該調參(我又不知道如何調參)

第68輪測試精度為:0.6965

第69輪測試精度為:0.691

第70輪測試精度為:0.6965

第71輪測試精度為:0.6966

第72輪測試精度為:0.6911

第73輪測試精度為:0.7012

第74輪測試精度為:0.7021

第75輪測試精度為:0.6868

第76輪測試精度為:0.6979

第77輪測試精度為:0.6822

第78輪測試精度為:0.6837

第79輪測試精度為:0.6923

一 cifar10分類訓練

本次學習使用caffe master檔案在downloads目錄下,使用caffe master。1.準備資料庫 cifar 10 預設在caffe master目錄下 終端執行如下命令獲取資料庫檔案 chenshaobo idea downloads caffe master cd data ci...

VGG16 用於分類和檢測的卷積網路

vgg16是由牛津大學的k.simonyan和a.zisserman在 用於大規模影象識別的非常深卷積網路 的 中提出的卷積神經網路模型。該模型在imagenet中實現了92.7 的前5個測試精度,這是屬於1000個類的超過1400萬張影象的資料集。它是ilsvrc 2014提交的著名模型之一。它通...

vgg訓練自己的資料24分類ASL手勢資料集

今天心情相對於前幾天好多了。這一篇!訓練asl資料集。24分類。先看檔案目錄 三個檔案。最後乙個是訓練。第乙個是資料集的處理。中間的那個是用來測試的。使用 第一 把trainvgg.py 裡面資料集換成自己的。這裡注意開始的分類我是24分類。a b c 第二 開始 訓練,結束後就可以看到效果。第三 ...