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 第二 開始 訓練,結束後就可以看到效果。第三 ...