CNN的网络结构:
conv+relu–> conv+relu+pool–>conv+relu–> conv+relu+pool–>fc+relu–>fc 。
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 27 19:38:44 2019
@author: macheng
"""
from __future__ import print_function, division
import tensorflow as tf
from sklearn.metrics import confusion_matrix
import numpy as np
import load
#train_samples 是维度为[num_images, image_size, image_size, num_channels]大小的4维矩阵
#train_labels 是维度为[num_images, 10]大小的2维矩阵
train_samples, train_labels = load._train_samples, load._train_labels
test_samples, test_labels = load._test_samples, load._test_labels
print('Training set', train_samples.shape, train_labels.shape)
print(' Test set', test_samples.shape, test_labels.shape)
image_size = load.image_size #32
num_labels = load.num_labels #10
num_channels = load.num_channels #channel为1,灰度图
def get_chunk(samples, labels, chunkSize):
if len(samples) != len(labels):
raise Exception('Length of samples and labels must equal')
stepStart = 0 # initial step
i = 0
while stepStart < len(samples):
stepEnd = stepStart + chunkSize
if stepEnd < len(samples):
yield i, samples[stepStart:stepEnd], labels[stepStart:stepEnd]
i += 1
stepStart = stepEnd
class Network():
def __init__(self, num_hidden, batch_size, conv_depth, kernel_size, pooling_scale):
self.batch_size = batch_size
self.test_batch_size = 500
# Hyper Parameters
self.num_hidden = num_hidden
self.kernel_size = kernel_size # 卷积核的大小
self.conv1_depth = conv_depth # 卷积的深度(也就是卷积核的个数)
self.conv2_depth = conv_depth
self.conv3_depth = conv_depth
self.conv4_depth = conv_depth
self.last_conv_depth = self.conv4_depth
self.pooling_scale = pooling_scale
self.pooling_stride = self.pooling_scale # Max Pooling Stride
# 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.merged = None
self.train_summaries = []
self.test_summaries = []
"""
添加summary.FileWriter
"""
self.define_graph()
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
self.session = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options), graph=self.graph)
self.writer = tf.summary.FileWriter('./board', self.graph)
def define_graph(self):
'''
定义我的计算图谱
'''
with self.graph.as_default():
# 这里只是定义图谱中的各种变量
with tf.name_scope('inputs'):
self.tf_train_samples = tf.placeholder(
tf.float32, shape=(self.batch_size, image_size, image_size, num_channels), name='tf_train_samples'
)
self.tf_train_labels = tf.placeholder(
tf.float32, shape=(self.batch_size, num_labels