1.拥有自己的数据集
2.构建卷积神经网络
3.构建算法
4.实现模型的评估
import tensorflow as tf
# 导入MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data", one_hot=True)
# 学习率
learning_rate = 0.001
# 训练迭代数
num_steps = 500
# 每次输入的样本数
batch_size = 128
# 显示频道
display_step = 10
# 网络参数
num_input = 784 # MNIST 数据集是784维,也就是 28*28
num_classes = 10 # MNIST 总共有10个类别,分别是 0-9
dropout = 0.75 # Dropout, 一个正则化参数
# tensorflow 图定义Graph
X = tf.placeholder(tf.float32, [None, num_input])
Y = tf.placeholder(tf.float32, [None, num_classes])
keep_prob = tf.placeholder(tf.float32) # dropout (keep probability)
tf.placeholder(
dtype,
shape=None,
name=None
)
参数:
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是3,行不定) name:名称
函数说明
placeholder()函数是在神经网络构建graph的时候在模型中的占位,此时并没有把要输入的数据传入模型,它只会分配必要的内存。等建立session,在会话中,运行模型的时候通过feed_dict()函数向占位符喂入数据。
# 卷积层设置
def conv2d(x, W, b, strides=1):
x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
x = tf.nn.bias_add(x, b)
return tf.nn.relu(x)
# 池化层设置
def maxpool2d(x, k=2):
return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],
padding='SAME')
# CNN模型创建
def conv_net(x, weights, biases, dropout):
#一个标准的tensorflow 输入结构是 4-D tensor: [Batch Size, Height, Width, Channel]
x = tf.reshape(x, shape=[-1, 28, 28, 1])
conv1 = conv2d(x, weights['wc1'], biases['bc1'])
conv1 = maxpool2d(conv1, k=2)
conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])
conv2 = maxpool2d(conv2, k=2)
# 全连接层
fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])
fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])
fc1 = tf.nn.relu(fc1)
# 添加dropout
fc1 = tf.nn.dropout(fc1, dropout)
# 输出结果
out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])
return out