使用TensorFlow进行特征提取(中层特征)以及mat文件转为tfrecord方法

本文介绍了如何在TensorFlow中提取卷积神经网络(如VGG16)的中层特征,并将MAT文件转换为TFRecord格式,以便于数据输入。作者分享了GitHub代码库链接,探讨了中层特征在实际应用中的价值,并提供了MAT到TFRecord转换的关键代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习TensorFlow这个Google公司的神器一年之后,因为课题的需求,需要提取卷积神经网络的某一层的特征,也就是我们所说的中层特征,似乎中文网站没有关于这方面的介绍,在经过摸索之后,终于搞清楚了流程,给大家分享一下。

我的GitHub地址是https://github.com/zhuzhuxia1994/midfeature-tensorflow,具体的代码陆续都会放到里面,大家如果方便的话可以点个星,嘿嘿额大笑大笑

首先我默认读者已经具有一定的TensorFlow的基础,因为没有基础的同学应该也不会上来就需要提取中层特征。如果有同学对使用TensorFlow训练自己的数据库还不熟悉的话,可以在下面留言,我会考虑写一下。

众所周知,卷积神经网络中的卷积层的目的其实就是特征提取,当卷积层堆叠的越多,获得的特征就越抽象。

下面先贴上一段卷积神经网络VGG16的代码

    
def conv_op(input_op, name, kh, kw, n_out, dh, dw, p):
    Args:
    input_op:输入的tensor
    name:这一层的名称
    kh:kernel height即卷积核的高
    kw:kernel weight即卷积核的宽
    n_out:卷积核数量即输出通道数
    dh:步长的高
    dw:步长的宽
    p:参数列表
    '''
    n_in = input_op.get_shape()[-1].value # 获取input_op的通道数

    with tf.name_scope(name) as scope: # 设置scope,生成的Variable使用默认的命名
        kernel = tf.get_variable(scope+"w",  # kernel(即卷积核参数)使用tf.get_variable创建
                                 shape=[kh, kw, n_in, n_out], # 【卷积核的高,卷积核的宽、输入通道数,输出通道数】
                                 dtype=tf.float32, 
                                 initializer=tf.contrib.layers.xavier_initializer_conv2d()) # 参数初始化
        # 使用tf.nn.conv2d对input_op进行卷积处理,卷积核kernel,步长dh*dw,padding模式为SAME
        conv = tf.nn.conv2d(input_op, kernel, (1, dh, dw, 1), padding='SAME') 
        bias_init_val = tf.constant(0.0, shape=[n_out], dtype=tf.float32) # biases使用tf.constant赋值为0
        biases = tf.Variable(bias_init_val, trainable=True, name='b') # 将bias_init_val转成可训练的参数
        z = tf.nn.bias_add(conv, biases) # 将卷
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值