tensorflow CNN实际例子
来源:互联网 发布:做网络推广的心得 编辑:程序博客网 时间:2024/05/23 01:46
本程序对tensorflow建立CNN模型进行编程。程序中使用的数据集是钢板缺陷图像数据集。对钢板缺陷图形进行分类缺陷一共五类,每类图片数量是300张,一共1500张,训练集和我测试集的比例是4:1。图片尺寸是200×200。
程序包括两个文件:
(1)训练集测试集生成文件:load.py
(2)CNN模型建立、训练和测试文件:CNNmodel.py
load.py文件
# load the dataSet# encoding:utf-8# Python2 兼容from __future__ import print_function, divisionfrom scipy.io import loadmat as loadimport numpy as npdef reformat(samples, labels): # 改变原始数据的形状 samples = np.transpose(samples, (3, 0, 1, 2)).astype(np.float32) # labels 变成 one-hot labels = np.array([x[0] for x in labels]) one_hot_labels = [] for num in labels: one_hot = [0.0]*5 one_hot[num] = 1.0 one_hot_labels.append(one_hot) labels = np.array(one_hot_labels).astype(np.float32) return samples, labelsdef normalize(samples): # 将图片从 0~255 线性映射到 -1.0~+1.0 return (samples*1.0)/128.0 - 1.0# load the dataset# 用matlab制作的数据集文件 .mat文件train = load('trainSet.mat')print('Train Samples Shape: ', train['trainImage'].shape)print('Train Labels Shape: ', train['trainLabel'].shape)_train_samples = train['trainImage']_train_labels = train['trainLabel']n_train_samples, _train_labels = reformat(_train_samples, _train_labels)# normalize the images data_train_samples = normalize(n_train_samples)# training datatrain_samples = _train_samples[0:1200]train_labels = _train_labels[0:1200]# test datasettest_samples = _train_samples[1200:1500]test_labels = _train_labels[1200:1500]num_labels = 5image_size = 200num_channels = 1if __name__ == '__main__': pass
CNNmodel.py
""" 本程序对钢板缺陷图像进行分类。 缺陷一共五类,每类图片数量是300张,一共1500张,训练集和我测试集的比例是4:1。 图片尺寸是200×200。"""import tensorflow as tfimport time import load # 数据集载入文件# 训练集和标签train_samples, train_labels = load.train_samples, load.train_labels# 测试集和标签test_samples, test_labels = load.test_samples, load.test_labels# 图片尺寸200× 200,标签向量长度5,图片通道数1image_size = load.image_sizenum_labels = load.num_labelsnum_channels = load.num_channels# 定义神经网络模型类class Network(): def __init__(self): """ num_hidden1和num_hidden2分别为隐藏层隐藏层2 batch_size: 每一批数据的数量 """ # 训练集和测试集批大小 self.train_batch_size = 10 self.test_batch_size = 300 # Graph related self.graph = tf.Graph() self.tf_train_samples = None self.tf_train_labels = None self.tf_test_samples = None self.tf_test_labels = None self.tf_test_prediction = None self.keep_prob = None def define_graph(self): # 定义计算图谱 with self.graph.as_default(): # input data self.tf_train_samples = tf.placeholder(tf.float32, shape = [None, image_size, image_size, num_channels]) self.tf_train_labels = tf.placeholder(tf.float32, shape = [None, num_labels]) self.tf_test_samples = tf.placeholder(tf.float32, shape = [None, image_size, image_size, num_channels]) self.keep_prob = tf.placeholder(tf.float32) # initialize the weights def weight_variable(shape): w = tf.truncated_normal(shape = shape, stddev = 0.1) return tf.Variable(w) # initialize the biases def bias_variable(shape): b = tf.constant(0.1, shape = shape) return tf.Variable(b) def conv2d_strides1(x, w): return tf.nn.conv2d(x, w, strides = [1, 1, 1, 1], padding = 'SAME') def conv2d_strides2(x, w): return tf.nn.conv2d(x, w, strides = [1, 2, 2, 1], padding = 'SAME') def max_pooling_2x2(x): return tf.nn.max_pool(x, ksize = [1, 2, 2, 1], strides = [1, 2, 2, 1], padding = 'SAME') # variable convolution layer 1 conv1_weights = weight_variable([5, 5, 1, 32]) conv1_biases = bias_variable([32]) # variable convolution layer 2 conv2_weights = weight_variable([5, 5, 32, 64]) conv2_biases = bias_variable([64]) # variable convolution layer 3 conv3_weights = weight_variable([5, 5, 64, 64]) conv3_biases = bias_variable([64]) # variable convolution layer 4 conv4_weights = weight_variable([5, 5, 64, 128]) conv4_biases = bias_variable([128]) # fully connected layer 1 fc1_weights = weight_variable([7*7*128, 1024]) fc1_biases = bias_variable([1024]) # fully connected layer 2 fc2_weights = weight_variable([1024, 600]) fc2_biases = bias_variable([600]) # fully connected layer 3 fc3_weights = weight_variable([600, 5]) fc3_biases = bias_variable([5]) # L2正则化 def apply_regularization_l2(_lambda): regularization = 0.0 regularization += tf.nn.l2_loss(fc1_weights) + tf.nn.l2_loss(fc1_biases) + \ tf.nn.l2_loss(fc2_weights) + tf.nn.l2_loss(fc2_biases) + \ tf.nn.l2_loss(fc3_weights) + tf.nn.l2_loss(fc3_biases) return _lambda*regularization # 定义图谱运算 def model(data): conv1_hidden = tf.nn.relu(conv2d_strides2(data, conv1_weights) + conv1_biases) pooling1_hidden = max_pooling_2x2(conv1_hidden) conv2_hidden = tf.nn.relu(conv2d_strides1(pooling1_hidden, conv2_weights) + conv2_biases) pooling2_hidden = max_pooling_2x2(conv2_hidden) conv3_hidden = tf.nn.relu(conv2d_strides1(pooling2_hidden, conv3_weights) + conv3_biases) pooling3_hidden = max_pooling_2x2(conv3_hidden) conv4_hidden = tf.nn.relu(conv2d_strides1(pooling3_hidden, conv4_weights) + conv4_biases) pooling4_hidden = max_pooling_2x2(conv4_hidden) flat = tf.reshape(pooling4_hidden, [-1, 7*7*128]) fc1_hidden = tf.nn.relu(tf.matmul(flat, fc1_weights) + fc1_biases) # dropout fc1_dropout = tf.nn.dropout(fc1_hidden, self.keep_prob) fc2_hidden = tf.nn.relu(tf.matmul(fc1_dropout, fc2_weights) + fc2_biases) # dropout fc2_dropout = tf.nn.dropout(fc2_hidden, self.keep_prob) logits = tf.matmul(fc2_dropout, fc3_weights) + fc3_biases return logits # Training compute logits = model(self.tf_train_samples) # Loss self.loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, self.tf_train_labels)) + apply_regularization_l2(5e-4) # Optimizer lr = 0.002 global_step = tf.Variable(0, trainable = False) # 学习率learning rate learning_rate = tf.train.exponential_decay(lr, global_step*self.train_batch_size, decay_steps = 100, decay_rate = 0.9) self.optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.loss) # Prediction self.train_prediction = tf.nn.softmax(logits) self.test_prediction = tf.nn.softmax(model(self.tf_test_samples)) def run(self): self.session = tf.Session(graph = self.graph) with self.session as session: init = tf.global_variables_initializer() session.run(init) # train print('Strat Training') for j in range(16): # Epoch for i in range(1200//self.train_batch_size): train_batch_samples, train_batch_labels = train_samples[i*self.train_batch_size:(i+1)*self.train_batch_size], train_labels[i*self.train_batch_size:(i+1)*self.train_batch_size] _, l, predictions = session.run([self.optimizer, self.loss, self.train_prediction], feed_dict = {self.tf_train_samples:train_batch_samples, self.tf_train_labels:train_batch_labels, self.keep_prob:0.8}) accuracy = self.accuracy(predictions, train_batch_labels) print('Epoch %d Minibatch loss at step %d: %f' % (j, i, l)) print('Epoch %d Minibatch accuracy : %f' % (j, session.run(accuracy))) # test print('Strat Test') for m in range(6): test_batch_samples, test_batch_labels = load.train_samples[m*200:(m+1)*200], load.train_labels[m*200:(m+1)*200] result = session.run(self.test_prediction, feed_dict = {self.tf_test_samples: test_batch_samples, self.keep_prob:1.0}) accuracy = self.accuracy(result, test_batch_labels) print ('Training accuracy at batch %d is: %f' %(m, session.run(accuracy))) test_batch_samples, test_batch_labels = test_samples, test_labels result = session.run(self.test_prediction, feed_dict = {self.tf_test_samples: test_batch_samples, self.keep_prob:1.0}) accuracy = self.accuracy(result, test_batch_labels) # print("prediction label is: ", session.run(tf.argmax(result, 1))) # print("true label is: ", test_labels) print ('Test accuracy is: ', session.run(accuracy)) def errorCount(predictions, labels, numLen, numLabels): session2 = tf.Session() argmax_predictions = session2.run(tf.argmax(predictions, 1)) argmax_labels = session2.run(tf.argmax(labels, 1)) errorCount = {} trueCount = {} # initialize the dictionory for j in range(numLabels): errorCount[j] = 0 trueCount[j] = 0 # count the numnbers for i in range(numLen): if (argmax_predictions[i] != argmax_labels[i]): errorCount[argmax_labels[i]] += 1 else: trueCount[argmax_labels[i]] += 1 # print the result for k in range(numLabels): print("error count %d is %d \n" % (k, errorCount[k])) print("true count %d is %d \n" % (k, trueCount[k])) errorCount(result, test_batch_labels, 300, 5) # 计算正确类的函数 def accuracy(self, predictions, labels): # 正确率 _predictions = tf.argmax(predictions, 1) _labels = tf.argmax(labels, 1) correct_prediction = tf.equal(_predictions, _labels) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) return accuracyif __name__ == '__main__': start = time.time() net = Network() net.define_graph() net.run() end = time.time() # 计算运行时间 timeLength = (end - start)*1.0 / 60.0 print("running time is: ", timeLength)
阅读全文
1 0
- tensorflow CNN实际例子
- tensorflow 学习(2) cnn例子
- Tensorflow实现一个CNN分类的例子
- Tensorflow实现一个完整的CNN例子
- TensorFlow的cnn做mnist例子
- 【Tensorflow】实现简单的卷积神经网络CNN实际代码
- Deep Learning 读书笔记(七):关于CNN的实际例子
- [04]tensorflow实现CNN
- 用tensorflow搭建CNN
- tensorflow实现CNN
- Tensorflow之CNN实践
- TensorFlow实现CNN
- tensorflow CNN for mnist
- Tensorflow 笔记 1 CNN
- tensorflow实现CNN
- TensorFlow入门-MNIST & CNN
- tensorflow入门Day4-CNN
- TensorFlow入门-CIFAR10&CNN
- 05 flume--Azkaban--sqoop
- 线性筛法
- Python学习中常见的错误有哪些?
- [Machine Learning] [Octave]Gradient Descent Practice
- Web系统测试总结
- tensorflow CNN实际例子
- 666. Path Sum IV
- vue-router的使用及实现原理
- Freemarker整合SpringMVC与JSP配置详解
- ArrayList源码分析
- C语言第三课
- 吃过的药—身体是自己的
- lucene、solr区别
- xdoj 1234: 尧老师要教孩子玩球球