#%%
import tensorflow as tf
#%%
def inference(images, batch_size, n_classes):
'''Build the model
Args:
images: image batch, 4D tensor, tf.float32, [batch_size, width, height, channels]
Returns:
output tensor with the computed logits, float, [batch_size, n_classes]
'''
#conv1, shape = [kernel size, kernel size, channels, kernel numbers]
with tf.variable_scope('conv1') as scope:
weights = tf.get_variable('weights',
shape = [3,3,3, 16],
dtype = tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.1,dtype=tf.float32))
biases = tf.get_variable('biases',
shape=[16],
dtype=tf.float32,
initializer=tf.constant_initializer(0.1))
conv = tf.nn.conv2d(images, weights, strides=[1,1,1,1], padding='SAME')
pre_activation = tf.nn.bias_add(conv, biases)
conv1 = tf.nn.relu(pre_activation, name= scope.name)
#pool1 and norm1
with tf.variable_scope('pooling1_lrn') as scope:
pool1 = tf.nn.max_pool(conv1, ksize=[1,3,3,1],strides=[1,2,2,1],
padding='SAME', name='pooling1')
norm1 = tf.nn.lrn(pool1, depth_radius=4, bias=1.0, alpha=0.001/9.0,
beta=0.75,name='norm1')
#conv2
with tf.variable_scope('conv2') as scope:
weights = tf.get_variable('weights',
shape=[3,3,16,16],
dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.1,dtype=tf.float32))
biases = tf.get_variable('biases',
shape=[16],
dtype=tf.float32,
initializer=tf.constant_initializer(0.1))
conv = tf.nn.conv2d(norm1, weights, strides=[1,1,1,1],padding='SAME')
pre_activation = tf.nn.bias_add(conv, biases)
conv2 = tf.nn.relu(pre_activation, name='conv2')
#pool2 and norm2
with tf.variable_scope('pooling2_lrn') as scope:
norm2 = tf.nn.lrn(conv2, depth_radius=4, bias=1.0, alpha=0.001/9.0,
beta=0.75,name='norm2')
pool2 = tf.nn.max_pool(norm2, ksize=[1,3,3,1], strides=[1,1,1,1],
padding='SAME',name='pooling2')
#local3
with tf.variable_scope('local3') as scope:
reshape = tf.reshape(pool2, shape=[batch_size, -1])
dim = reshape.get_shape()[1].value
weights = tf.get_variable('weights',
shape=[dim,128],
dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.005,dtype=tf.float32))
biases = tf.get_variable('biases',
shape=[128],
dtype=tf.float32,
initializer=tf.constant_initializer(0.1))
local3 = tf.nn.relu(tf.matmul(reshape, weights) + biases, name=scope.name)
#local4
with tf.variable_scope('local4') as scope:
weights = tf.get_variable('weights',
shape=[128,128],
dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.005,dtype=tf.float32))
biases = tf.get_variable('biases',
shape=[128],
dtype=tf.float32,
initializer=tf.constant_initializer(0.1))
local4 = tf.nn.relu(tf.matmul(local3, weights) + biases, name='local4')
# softmax
with tf.variable_scope('softmax_linear') as scope:
weights = tf.get_variable('softmax_linear',
shape=[128, n_classes],
dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.005,dtype=tf.float32))
biases = tf.get_variable('biases',
shape=[n_classes],
dtype=tf.float32,
initializer=tf.constant_initializer(0.1))
softmax_linear = tf.add(tf.matmul(local4, weights), biases, name='softmax_linear')
return softmax_linear
#%%
#def inference (input_tensor, train, regularizer):
# # 声明第一层神经网络的变量并完成前向传播过程。这个过程和6.3.1小节中介绍的一致。
# # 通过使用不同的命名空间来隔离不同层的变量,这可以让每一层中的变量命名只需要考虑在当前层的作用,而不需要担心重名的问题。
# # 和标准LeNet-5模型不大一样,这里定义卷积层的输入为28*28*1的原始MNIST图片像素。
# # 因为卷积层中使用了全0填充,所以输出为28*28*32的矩阵。
# with tf.variable_scope('layer1-conv1',reuse =tf.AUTO_REUSE):
# # 这里使用tf.get_variable或tf.Variable没有本质区别,因为在训练或是测试中没有在同一个程序中多次调用这个函数。
# # 如果在同一个程序中多次调用,在第一次调用之后需要将reuse参数置为True。
# conv1_weights = tf.get_variable(
# "weight", [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP],
# initializer = tf.truncated_normal_initializer(stddev=0.1)
# )
# conv1_biases = tf.get_variable("bias", [CONV1_DEEP], initializer=tf.constant_initializer(0.0))
# # 使用边长为5,深度为32的过滤器,过滤器移动的步长为1,且使用全0填充
# conv1 = tf.nn.conv2d(input_tensor, conv1_weights, strides=[1, 1, 1, 1], padding='SAME')
# relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_biases))
#
# # 实现第二层池化层的前向传播过程。
# # 这里选用最大池化层,池化层过滤器的边长为2,使用全0填充且移动的步长为2。
# # 这一层的输入是上一层的输出,也就是28*28*32的矩阵。输出为14*14*32的矩阵。
# with tf.name_scope('layer2-pool'):
# pool1 = tf.nn.max_pool(relu1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
#
# # 声明第三层卷积层的变量并实现前向传播过程。
# # 这一层的输入为14*14*32的矩阵,输出为14*14*64的矩阵。
# with tf.variable_scope('layer3-conv2',reuse =tf.AUTO_REUSE):
# conv2_weights = tf.get_variable(
# "weight", [CONV2_SIZE, CONV2_SIZE, CONV1_DEEP, CONV2_DEEP],
# initializer = tf.truncated_normal_initializer(stddev=0.1)
# )
# conv2_biases = tf.get_variable("bias", [CONV2_DEEP], initializer=tf.constant_initializer(0.0))
# # 使用边长为5,深度为64的过滤器,过滤器移动的步长为1,且使用全0填充
# conv2 = tf.nn.conv2d(pool1, conv2_weights, strides=[1, 1, 1, 1], padding='SAME')
# relu2 = tf.nn.relu(tf.nn.bias_add(conv2, conv2_biases))
#
# # 实现第四层池化层的前向传播过程。
# # 这一层和第二层的结构是一样的。这一层的输入为14*14*64的矩阵,输出为7*7*64的矩阵。
# with tf.name_scope('layer4-poo2'):
# pool2 = tf.nn.max_pool(relu2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
#
# # 将第四层池化层的输出转化为第五层全连接层的输入格式。
# # 第四层的输出为7*7*64的矩阵,然而第五层全连接层需要的输入格式为向量,所以在这里需要将这个7*7*64的矩阵拉直成一个向量。
# # pool2.get_shape函数可以得到�
没有合适的资源?快使用搜索试试~ 我知道了~
tensorflow 五种花朵分类识别
共19个文件
jpg:7个
py:5个
ini:4个
3星 · 超过75%的资源 需积分: 50 216 下载量 12 浏览量
2018-05-21
15:15:52
上传
评论 19
收藏 302KB ZIP 举报
温馨提示
基于Tensorflow 框架编写的花朵识别程序 ,使用了tfrecord 数据读取格式,并且添加了图形可视化操作,可以在训练过程中观测测试集以及验证集的loss值的变化,以及accuracy的变化,并附上单幅图的识别
资源推荐
资源详情
资源评论
收起资源包目录
flower_tfrecord.zip (19个子文件)
flower_tfrecord
data
recognize_one
sunflowers
guazi.jpg 114KB
timg.jpg 31KB
tulips
tulips.jpg 24KB
timg.jpg 26KB
dandelion
dandelion76.jpg 22KB
roses
rose4.jpg 26KB
rose213.jpg 19KB
tfrecord
test
sunflowers
tulips
dandelion
roses
data_tfrecord.py 10KB
train_records.py 5KB
__pycache__
model.cpython-35.pyc 4KB
data_tfrecord.cpython-35.pyc 6KB
untitled1.py 2KB
evaluate_one_image.py 3KB
.spyproject
encoding.ini 64B
vcs.ini 92B
codestyle.ini 62B
workspace.ini 488B
logs
model.py 12KB
TensorBoard
train
events.out.tfevents.1525877468.DESKTOP-1IM4ES1 232KB
validation
共 19 条
- 1
资源评论
- wgsunbird1102019-03-03TypeError: Expected string passed to parameter
- qq_365317412018-12-05先下载,随后看看。
- 流氓本性2020-05-23你那个网上爬的数据集在哪?
墨晓白
- 粉丝: 118
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功