import tensorflow as tf
#=========================================================================
#网络结构定义
#输入参数:images,image batch、4D tensor、tf.float32、[batch_size, width, height, channels]
#返回参数:logits, float、 [batch_size, n_classes]
def inference(images, batch_size, n_classes):
#一个简单的卷积神经网络,卷积+池化层x2,全连接层x2,最后一个softmax层做分类。
#卷积层1
#16个3x3的卷积核(3通道),padding=’SAME’,表示padding后卷积的图与原图尺寸一致,激活函数relu()
with tf.variable_scope('conv1') as scope:
weights = tf.Variable(tf.truncated_normal(shape=[3,3,3,16], stddev = 1.0, dtype = tf.float32),
name = 'weights', dtype = tf.float32)
biases = tf.Variable(tf.constant(value = 0.1, dtype = tf.float32, shape = [16]),
name = 'biases', dtype = tf.float32)
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)
#池化层1
#3x3最大池化,步长strides为2,池化后执行lrn()操作,局部响应归一化,对训练有利。
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')
#卷积层2
#16个3x3的卷积核(16通道),padding=’SAME’,表示padding后卷积的图与原图尺寸一致,激活函数relu()
with tf.variable_scope('conv2') as scope:
weights = tf.Variable(tf.truncated_normal(shape=[3,3,16,16],
stddev = 0.1, dtype =
tf.float32),
name = 'weights',
dtype = tf.float32)
biases = tf.Variable(tf.constant(value = 0.1,
dtype = tf.float32,
shape = [16]),
name = 'biases',
dtype = tf.float32)
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')
#池化层2
#3x3最大池化,步长strides为2,池化后执行lrn()操作,
#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')
#全连接层3
#128个神经元,将之前pool层的输出reshape成一行,激活函数relu()
with tf.variable_scope('local3') as scope:
reshape = tf.reshape(pool2, shape=[batch_size, -1])
dim = reshape.get_shape()[1].value
weights = tf.Variable(tf.truncated_normal(shape=[dim,128], stddev = 0.005, dtype = tf.float32),
name = 'weights',
dtype = tf.float32)
biases = tf.Variable(tf.constant(value = 0.1, dtype = tf.float32, shape = [128]),
name = 'biases',
dtype=tf.float32)
local3 = tf.nn.relu(tf.matmul(reshape, weights) + biases, name=scope.name)
#全连接层4
#128个神经元,激活函数relu()
with tf.variable_scope('local4') as scope:
weights = tf.Variable(tf.truncated_normal(shape=[128,128], stddev = 0.005, dtype = tf.float32),
name = 'weights',
dtype = tf.float32)
biases = tf.Variable(tf.constant(value = 0.1, dtype = tf.float32, shape = [128]),
name = 'biases',
dtype = tf.float32)
local4 = tf.nn.relu(tf.matmul(local3, weights) + biases, name='local4')
#Softmax回归层
#将前面的FC层输出,做一个线性回归,计算出每一类的得分,在这里是3类,所以这个层输出的是三个得分。
with tf.variable_scope('softmax_linear') as scope:
weights = tf.Variable(tf.truncated_normal(shape=[128, n_classes], stddev = 0.005, dtype = tf.float32),
name = 'softmax_linear', dtype = tf.float32)
biases = tf.Variable(tf.constant(value = 0.1, dtype = tf.float32, shape = [n_classes]),
name = 'biases', dtype = tf.float32)
softmax_linear = tf.add(tf.matmul(local4, weights), biases, name='softmax_linear')
return softmax_linear
#-----------------------------------------------------------------------------
#loss计算
#传入参数:logits,网络计算输出值。labels,真实值,在这里是0或者1
#返回参数:loss,损失值
def losses(logits, labels):
with tf.variable_scope('loss') as scope:
cross_entropy =tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,
labels=labels,
name='xentropy_per_example')
loss = tf.reduce_mean(cross_entropy, name='loss')
tf.summary.scalar(scope.name+'/loss', loss)
return loss
#--------------------------------------------------------------------------
#loss损失值优化
#输入参数:loss。learning_rate,学习速率。
#返回参数:train_op,训练op,这个参数要输入sess.run中让模型去训练。
def trainning(loss, learning_rate):
with tf.name_scope('optimizer'):
optimizer = tf.train.AdamOptimizer(learning_rate= learning_rate)
global_step = tf.Variable(0, name='global_step', trainable=False)
train_op = optimizer.minimize(loss, global_step= global_step)
return train_op
#-----------------------------------------------------------------------
#评价/准确率计算
#输入参数:logits,网络计算值。labels,标签,也就是真实值,在这里是0,1,2。
#返回参数:accuracy,当前step的平均准确率,也就是在这些batch中多少张图片被正确分类了。
def evaluation(logits, labels):
with tf.variable_scope('accuracy') as scope:
correct = tf.nn.in_top_k(logits, labels, 1)
correct = tf.cast(correct, tf.float16)
accuracy = tf.reduce_mean(correct)
tf.summary.scalar(scope.name+'/accuracy', accuracy)
return accuracy
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
CNN实现图片分类,python代码 (154个子文件)
1.67.jpg 2KB
1.79.jpg 2KB
4.216.jpg 2KB
0.13.jpg 2KB
1.75.jpg 2KB
1.81.jpg 2KB
1.90.jpg 2KB
1.84.jpg 2KB
0.22.jpg 2KB
1.93.jpg 2KB
0.36.jpg 2KB
0.2.jpg 2KB
1.52.jpg 2KB
1.60.jpg 2KB
1.71.jpg 2KB
0.24.jpg 2KB
4.203.jpg 2KB
4.225.jpg 2KB
4.233.jpg 2KB
0.48.jpg 2KB
1.57.jpg 2KB
0.9.jpg 2KB
4.224.jpg 2KB
4.247.jpg 2KB
0.8.jpg 2KB
4.238.jpg 2KB
4.228.jpg 2KB
4.212.jpg 2KB
4.199.jpg 2KB
0.31.jpg 2KB
1.49.jpg 2KB
1.89.jpg 2KB
0.21.jpg 2KB
1.94.jpg 2KB
1.87.jpg 2KB
4.218.jpg 2KB
1.96.jpg 2KB
4.204.jpg 2KB
1.54.jpg 2KB
1.74.jpg 2KB
4.222.jpg 2KB
4.241.jpg 2KB
1.66.jpg 2KB
1.77.jpg 2KB
1.64.jpg 2KB
1.80.jpg 2KB
1.97.jpg 2KB
1.58.jpg 2KB
1.61.jpg 2KB
1.95.jpg 2KB
4.202.jpg 2KB
1.82.jpg 2KB
0.6.jpg 2KB
0.27.jpg 2KB
1.53.jpg 2KB
0.44.jpg 2KB
1.68.jpg 2KB
4.239.jpg 2KB
4.217.jpg 2KB
1.78.jpg 2KB
1.73.jpg 2KB
1.65.jpg 2KB
0.16.jpg 2KB
0.3.jpg 2KB
0.41.jpg 2KB
1.76.jpg 2KB
0.26.jpg 2KB
0.33.jpg 2KB
1.59.jpg 2KB
0.4.jpg 2KB
4.248.jpg 2KB
0.18.jpg 2KB
0.37.jpg 2KB
0.25.jpg 2KB
4.229.jpg 2KB
0.20.jpg 2KB
4.235.jpg 2KB
0.42.jpg 2KB
0.15.jpg 2KB
4.234.jpg 2KB
4.244.jpg 2KB
4.201.jpg 2KB
1.92.jpg 2KB
4.215.jpg 2KB
1.50.jpg 2KB
0.35.jpg 2KB
4.213.jpg 2KB
0.12.jpg 2KB
4.246.jpg 2KB
0.39.jpg 2KB
1.51.jpg 2KB
0.14.jpg 2KB
0.32.jpg 2KB
0.1.jpg 2KB
0.19.jpg 2KB
0.11.jpg 2KB
4.219.jpg 2KB
1.62.jpg 2KB
1.70.jpg 2KB
4.220.jpg 2KB
共 154 条
- 1
- 2
资源评论
- 色空空色2023-07-25这个文件的代码风格规范,代码结构清晰,对于进一步的自定义扩展也很方便。
- LauraKuang2023-07-25这个文件对于学习CNN实现图片分类非常有用,简洁明了,易懂易上手。
- 艾苛尔2023-07-25这个文件不仅仅提供了代码,还有对CNN图片分类的基本原理进行了简洁的解释,帮助我们更好地理解算法。
- 坐在地心看宇宙2023-07-25文件中的代码经过了良好的注释,让人很容易理解每一个步骤的作用。
- FloritaScarlett2023-07-25这个文件提供了一个简单的Python代码示例,帮助初学者入门CNN图片分类,非常实用。
weixin_39402258
- 粉丝: 1
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功