Inception4的tensorflow实现,主要借助nn模块

Facenet 的 TensorFlow 实现 Facenet 的 TensorFlow 实现 上一节使用 mtcnn 可以将图片中的人的面部图像切割出来,这一节就要捕捉这些不同人的面部图像的特征,实现人脸识别。这一节参考的是 Google Facenet,其理论基础是文章 FaceNet: A Unified Embedding for Face Recognition and Clustering。这里我们的目标是重写 facenet,... 阅读详情

实现inception4网络,这是googlenet与resnet结合的卷积神经网络。

本文按照论文复现,论文中的InceptionA,InceptionB,InceptionC,以及reduction模块已写入函数,此次也将卷积函数简化,具体见demo:

# -*- coding: utf-8 -*-
"""
Created on Fri May 31 2019
@author: Ruoyu Chen
The Inceptionv4 networks
"""
import tensorflow as tf
 
BATCH_SIZE = 10
 
 
def weight_variable(shape, name=None):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial, name)
 
 
def bias_variable(shape, name=None):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial, name)
 
 
def conv2d(input, filter, strides, padding="SAME", name=None):
    # filters with shape [filter_height * filter_width * in_channels, output_channels]
    # Must have strides[0] = strides[3] =1
    # For the most common case of the same horizontal and vertices strides, strides = [1, stride, stride, 1]
    '''
    Args:
        input: A Tensor. Must be one of the following types: float32, float64.
        filter: A Tensor. Must have the same type as input.
        strides: A list of ints. 1-D of length 4. The stride of the sliding window for each dimension of input.
        padding: A string from: "SAME", "VALID". The type of padding algorithm to use.
        use_cudnn_on_gpu: An optional bool. Defaults to True.
        name: A name for the operation (optional).
    '''
    return tf.nn.conv2d(input, filter, strides, padding=padding, name=name)  # padding="SAME"用零填充边界

def Conv(input, name, filter_size, bias_size, stride, padding = 'SAME'):
    with tf.name_scope(name):
        with tf.name_scope('Variable'):
            filters = weight_variable(filter_size, name='filter')
            bias = weight_variable(bias_size, name='bias')
        with tf.name_scope("Convolution"):
            layer = tf.nn.relu(conv2d(input, filters, strides=stride, padding = padding) + bias)
    return layer

def stem(image):
    # input shape(299,299,3)
    with tf.name_scope('steam'):
        net = Conv(input=image, name = 'Layer1', filter_size = [3,3,3,32], bias_size = [32],padding = 'VALID', stride = [1,2,2,1])
        net = Conv(input=net, name = 'Layer2', filter_size = [3,3,32,32], bias_size = [32], padding = 'VALID', stride = [1,1,1,1])
        net = Conv(input=net, name = 'Layer3', filter_size = [3,3,32,64], bias_size = [64], padding = 'SAME', stride = [1,1,1,1])
        with tf.name_scope('MaxPool_1'):
            maxpool = tf.nn.max_pool(net, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding="VALID",name='maxpool')
        net = Conv(input=net, name = 'Layer4', filter_size = [3,3,64,96], bias_size = [96], padding="VALID", stride = [1,2,2,1])
        with tf.name_scope('Filter_concat_1'):
            net = tf.concat([maxpool, net], 3)
        net_1 = Conv(input=net, name = 'Layer5_1', filter_size = [1,1,160,64], bias_size = [64], padding="SAME", stride = [1,1,1,1])
        net_1 = Conv(input=net_1, name = 'Layer6_1', filter_size = [3,3,64,96], bias_size = [96], padding="VALID",stride = [1,1,1,1])
        net_2 = Conv(input=net, name = 'Layer5_2', filter_size = [1,1,160,64], bias_size = [64], stride = [1,1,1,1])
        net_2 = Conv(input=net_2, name = 'Layer6_2', filter_size = [7,1,64,64], bias_size = [64], stride = [1,1,1,1])
        net_2 = Conv(input=net_2, name = 'Layer7_2', filter_size = [1,7,64,64], bias_size = [64], stride = [1,1,1,1])
        net_2 = Conv(input=net_2, name = 'Layer8_2', filter_size = [3,3,64,96], bias_size = [96], padding="VALID", stride = [1,1,1,1])
        with tf.name_scope('Filter_concat_2'):
            net = tf.concat([net_1, net_2], 3)
        net_1 = Conv(input=net, name = 'Layer9', filter_size = [3,3,192,192], bias_size = [192], padding="VALID", stride = [1,2,2,1])
        with tf.name_scope('MaxPool_2'):
            maxpool = tf.nn.max_pool(net, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID",name='maxpool')
        with tf.name_scope('Filter_concat_3'):
            net = tf.concat([net_1, maxpool], 3)
    return net

def inception_A(input, name):
    input_shape=input.get_shape().as_list()
    with tf.name_scope(name):
        with tf.name_scope('Average_Pool'):
            avg = tf.nn.avg_pool(input, ksize=[1, 2, 2, 1], strides=[1, 1, 1, 1], padding="SAME",name='avgpool')
        net1 = Conv(input=avg, name = 'Layer1_1', filter_size = [1,1,input_shape[3],96], bias_size = [96],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=input, name = 'Layer2_1', filter_size = [1,1,input_shape[3],96], bias_size = [96],padding = 'SAME', stride = [1,1,1,1])
        net3 = Conv(input=input, name = 'Layer3_1', filter_size = [1,1,input_shape[3],64], bias_size = [64],padding = 'SAME', stride = [1,1,1,1])
        net3 = Conv(input=net3, name = 'Layer3_2', filter_size = [3,3,64,96], bias_size = [96],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=input, name = 'Layer4_1', filter_size = [1,1,input_shape[3],64], bias_size = [64],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_2', filter_size = [3,3,64,96], bias_size = [96],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_3', filter_size = [3,3,96,96], bias_size = [96],padding = 'SAME', stride = [1,1,1,1])
        with tf.name_scope('Filter_concat'):
            net = tf.concat([net1, net2, net3, net4], 3)
    return net

def Reduction_A(input, n, k, I, m):
    input_shape=input.get_shape().as_list()
    with tf.name_scope('ReductionA'):
        with tf.name_scope('MaxPool'):
            maxpool = tf.nn.max_pool(input, ksize=[1, 3, 3, 1], strides=[1, 2,2, 1], padding="VALID",name='MaxPool')
        net1 = Conv(input=input, name = 'Layer1', filter_size = [3,3,input_shape[3],n], bias_size = [n],padding = 'VALID', stride = [1,2,2,1])
        net2 = Conv(input=input, name = 'Layer2_1', filter_size = [1,1,input_shape[3],k], bias_size = [k],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=net2, name = 'Layer2_2', filter_size = [3,3,k,I], bias_size = [I],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=net2, name = 'Layer2_3', filter_size = [3,3,I,m], bias_size = [m],padding = 'VALID', stride = [1,2,2,1])
        with tf.name_scope('Filter_concat'):
            net = tf.concat([maxpool ,net1, net2], 3)
    return net

def inception_B(input, name):
    input_shape=input.get_shape().as_list()
    with tf.name_scope(name):
        with tf.name_scope('Average_Pool'):
            avg = tf.nn.avg_pool(input, ksize=[1, 2, 2, 1], strides=[1, 1, 1, 1], padding="SAME",name='avgpool')
        net1 = Conv(input=avg, name = 'Layer1_1', filter_size = [1,1,input_shape[3],128], bias_size = [128],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=input, name = 'Layer2_1', filter_size = [1,1,input_shape[3],384], bias_size = [384],padding = 'SAME', stride = [1,1,1,1])
        net3 = Conv(input=input, name = 'Layer3_1', filter_size = [1,1,input_shape[3],192], bias_size = [192],padding = 'SAME', stride = [1,1,1,1])
        net3 = Conv(input=net3, name = 'Layer3_2', filter_size = [1,7,192,224], bias_size = [224],padding = 'SAME', stride = [1,1,1,1])
        net3 = Conv(input=net3, name = 'Layer3_3', filter_size = [7,1,224,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=input, name = 'Layer4_1', filter_size = [1,1,input_shape[3],192], bias_size = [192],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_2', filter_size = [1,7,192,192], bias_size = [192],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_3', filter_size = [7,1,192,224], bias_size = [224],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_4', filter_size = [1,7,224,224], bias_size = [224],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_5', filter_size = [7,1,224,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        with tf.name_scope('Filter_concat'):
            net = tf.concat([net1, net2, net3, net4], 3)
    return net

def Reduction_B(input):
    input_shape=input.get_shape().as_list()
    with tf.name_scope('ReductionB'):
        with tf.name_scope('MaxPool'):
            maxpool = tf.nn.max_pool(input, ksize=[1, 3, 3, 1], strides=[1, 2,2, 1], padding="VALID",name='MaxPool')
        net1 = Conv(input=input, name = 'Layer1_1', filter_size = [1,1,input_shape[3],192], bias_size = [192],padding = 'SAME', stride = [1,1,1,1])
        net1 = Conv(input=net1, name = 'Layer1_2', filter_size = [3,3,192,192], bias_size = [192],padding = 'VALID', stride = [1,2,2,1])
        net2 = Conv(input=input, name = 'Layer2_1', filter_size = [1,1,input_shape[3],256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=net2, name = 'Layer2_2', filter_size = [1,7,256,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=net2, name = 'Layer2_3', filter_size = [7,1,256,320], bias_size = [320],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=net2, name = 'Layer2_4', filter_size = [3,3,320,320], bias_size = [320],padding = 'VALID', stride = [1,2,2,1])
        with tf.name_scope('Filter_concat'):
            net = tf.concat([maxpool, net1, net2], 3)
    return net

def inception_C(input, name):
    input_shape=input.get_shape().as_list()
    with tf.name_scope(name):
        with tf.name_scope('Average_Pool'):
            avg = tf.nn.avg_pool(input, ksize=[1, 2, 2, 1], strides=[1, 1, 1, 1], padding="SAME",name='avgpool')
        net1 = Conv(input=avg, name = 'Layer1_1', filter_size = [1,1,input_shape[3],256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net2 = Conv(input=input, name = 'Layer2_1', filter_size = [1,1,input_shape[3],256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net3 = Conv(input=input, name = 'Layer3_1', filter_size = [1,1,input_shape[3],384], bias_size = [384],padding = 'SAME', stride = [1,1,1,1])
        net3_1 = Conv(input=net3, name = 'Layer3_2_1', filter_size = [1,3,384,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net3_2 = Conv(input=net3, name = 'Layer3_2_2', filter_size = [3,1,384,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=input, name = 'Layer4_1', filter_size = [1,1,input_shape[3],384], bias_size = [384],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_2', filter_size = [1,3,384,448], bias_size = [448],padding = 'SAME', stride = [1,1,1,1])
        net4 = Conv(input=net4, name = 'Layer4_3', filter_size = [3,1,448,512], bias_size = [512],padding = 'SAME', stride = [1,1,1,1])
        net4_1 = Conv(input=net4, name = 'Layer4_4_1', filter_size = [3,1,512,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        net4_2 = Conv(input=net4, name = 'Layer4_4_2', filter_size = [1,3,512,256], bias_size = [256],padding = 'SAME', stride = [1,1,1,1])
        with tf.name_scope('Filter_concat'):
            net = tf.concat([net1, net2, net3_1, net3_2, net4_1, net4_2], 3)
    return net

def layer(input, name, size):
    input_shape=input.get_shape().as_list()
    with tf.name_scope(name):
        with tf.name_scope('Variable'):
            W = weight_variable([input_shape[1], size], name='Weight')
            bias = weight_variable([size], name='bias')
        with tf.name_scope("layer"):
            layer = tf.nn.relu(tf.matmul(input, W, name='layer') + bias)
    return layer

def Inception_v4(input, keep_prob=0.8):
    '''参考论文: Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning'''
    # input_size:(299,299,3)
    net = stem(input)
    net = inception_A(net, 'Inception_A1')
    net = inception_A(net, 'Inception_A2')
    net = inception_A(net, 'Inception_A3')
    net = inception_A(net, 'Inception_A4')
    net = Reduction_A(net, n = 96, k = 96, I = 224, m = 256)
    net = inception_B(net, 'Inception_B1')
    net = inception_B(net, 'Inception_B2')
    net = inception_B(net, 'Inception_B3')
    net = inception_B(net, 'Inception_B4')
    net = inception_B(net, 'Inception_B5')
    net = inception_B(net, 'Inception_B6')
    net = inception_B(net, 'Inception_B7')
    net = Reduction_B(net)
    net = inception_C(net, 'Inception_C1')
    net = inception_C(net, 'Inception_C2')
    net = inception_C(net, 'Inception_C3')
    with tf.name_scope('Average_Pooling'):
        net = tf.nn.avg_pool(net, ksize=[1, 8, 8, 1], strides=[1, 1, 1, 1], padding="VALID",name='avgpool')
        net = tf.reshape(net,[-1,1536])
    with tf.name_scope('Dropout'):
        net = tf.nn.dropout(net, keep_prob)
    with tf.name_scope('Softmax'):
        net = layer(net, name='Layer', size = 1000)
    return net
 
def backward(datasets, label, test_data, test_label):
    with tf.name_scope('Input_data'):
        X = tf.placeholder(tf.float32, [None, 299, 299, 3], name="Input")
        Y_ = tf.placeholder(tf.float32, [None, 1], name='Estimation')
    LEARNING_RATE_BASE = 0.00001  # 最初学习率
    LEARNING_RATE_DECAY = 0.99  # 学习率的衰减率
    LEARNING_RATE_STEP = 1000  # 喂入多少轮BATCH-SIZE以后,更新一次学习率。一般为总样本数量/BATCH_SIZE
    gloabl_steps = tf.Variable(0, trainable=False)  # 计数器,用来记录运行了几轮的BATCH_SIZE,初始为0,设置为不可训练
    learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE, gloabl_steps, LEARNING_RATE_STEP,
                                               LEARNING_RATE_DECAY, staircase=True)
    keep_prob = tf.placeholder(tf.float32, name="keep_prob")
    y = VGG16(X)
    global_step = tf.Variable(0, trainable=False)
    with tf.name_scope('Accuracy'):
        correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(Y_, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    with tf.name_scope('loss'):
        loss_mse = tf.reduce_mean(-tf.reduce_sum(Y_ * tf.log(y), reduction_indices=[1]))
        tf.summary.scalar('loss', loss)
    with tf.name_scope('train'):
        train_step = tf.train.AdamOptimizer(0.001).minimize(loss_mse)
    saver = tf.train.Saver()
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        writer = tf.summary.FileWriter("./logs", sess.graph)
        sess.run(init_op)
        # 训练模型。
        STEPS = 500001
        min_loss = 1
        for i in range(STEPS):
            start = (i * BATCH_SIZE) % len(datasets)
            end = start + BATCH_SIZE
            if i % 100 == 0:
                run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
                run_metadata = tf.RunMetadata()
                summary_str, step, _ = sess.run([merged, gloabl_steps, train_step],
                                                feed_dict={X: datasets[start:end], Y_: label[start:end], keep_prob:1.0},
                                                options=run_options, run_metadata=run_metadata)
                writer.add_summary(summary_str, i)
                writer.add_run_metadata(run_metadata, 'step%d' % (i))
                test_accuracy = accuracy.eval(feed_dict={X: test_data, Y_: test_label, keep_prob: 1.0})
                print("After %d training step(s), accuracy is %g" % (i, test_accuracy))
                saver.save(sess, './logs/variable', global_step=i)
            else:
                summary_str, step, _ = sess.run([merged, gloabl_steps, train_step],
                                                feed_dict={X: datasets[start:end], Y_: label[start:end]})
                writer.add_summary(summary_str, i)
 
 
def main():
    with tf.name_scope('Input_data'):
        X = tf.placeholder(tf.float32, [None, 299, 299, 3], name="Input")
    keep_prob = tf.placeholder(tf.float32, name="keep_prob")
    y = Inception_v4(X, keep_prob)
    sess = tf.Session()
    writer = tf.summary.FileWriter("./logs", sess.graph)
    writer.close()
 
 
if __name__ == '__main__':
    main()

直接运行demo,将得到logs文件夹,运行tensorboard(注意,logs所在路径绝对不能带中文!)即可得到graph的具体图。由于图片过大无法下载,此处不再展示全部。

Steam模块的图:

InceptionA:

 

InceptionB:

InceptionC:

ReductionA: 

ReductionB: 

如果需要训练请具体修改main里面函数,运行backward函数。

[Tensorflow] Batch Normalization实现 一、tf.nn.batch_normalization Tensorflow 提供了Batch Normalization的API。但是,这个API很灵活,灵活的后果就是我们需要自己去定义所有的参数。 (比如,提供给此API的Tensor,居然需要我们自己去计算mean和variance) tf.nn.batch_normalization( x, 阅读详情

相关推荐

游戏开发实战:如何在Unity中实现六边形网格地图(附完整代码)

本文详细介绍了在Unity中实现六边形网格地图的完整开发流程,从数学原理到实战代码。涵盖三种主流坐标系转换方法、距离计算算法对比、网格生成与渲染技巧,以及高级功能如网格高亮、寻路算法和性能优化策略。适合策略游戏、战棋类游戏开发者提升地图系统开发效率。

652

GoogLeNet之InceptionV4神经网络简介与代码实战

GoogLeNet之InceptionV4神经网络简介与代码实战

修行之路 727

记一次Nacos线程数飙升排查

Nacos线程飙升问题排查

叭嘣的博客 2631

Tensorflow-slim——InceptionV3、InceptionV4图像分类训练与比较

前段时间做了一个简单的图像分类功能,采用Tensorflow-slim下的InceptionV3、InceptionV4网络模型,现在记录下两者在训练过程中的准确率、训练时间等进行一些比较。 项目地址:https://github.com/MrZhousf/tf-slim-inception 硬件配置如下: 系统:Ubuntu16.04TSL 显卡:GTX1080ti(11GB) x...

嘿,你好! 9954

深度学习简介(框架)

深度学习是一种基于人工神经网络的机器学习方法,它通过模拟人脑的工作原理来解决复杂的数据模式识别问题。这种方法在图像识别、语音识别、自然语言处理等领域取得了显著的进展。深度学习是机器学习的一个子领域,它基于人工神经网络的学习算法,特别是那些具有多层(深层)结构的网络。这些深度神经网络能够学习数据的高级特征和模式。深度学习作为人工智能的关键驱动技术,已经在多个领域展现出其强大的能力。随着研究的深入和技术的发展,深度学习将继续推动人工智能的边界向前发展。

2301_77539454的博客 5350

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

Inception V4

1、目的 受显存限制,旧版的Inception模型必须被拆分成sub-network进行训练;为了加速训练,在进行网络设计时就需要平衡不同sub-network之间的计算量,从而限制了网络设计的灵活性。 TensorFlow的出现,优化了梯度回传过程,使得显存占用量大大减少,无须将网络拆分训练。因此作者开始考虑performance更优的网络设计。 2、网络结构 1)stem (左:Inception-v4和Inception-ResNet-v2,右:Ince...

sinat_30618203的博客 861

【Pytorch实战教程】基于RML2018的融合网络分类 | LSTM网络和ResNet网络融合 | 含数据集的处理

这段代码是从原始数据中读取所选择的数据,画出星座图,并将星座图保存本地,然后将IQ数据保存成mat文件,将图片数据读取之后保存为npy文件,方便后续融合网络使用。

若北辰 926

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV4)模型算法详解

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV4)模型算法详解

yangyu0515的博客 2867

YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】

YOLOv8改进,小目标检测,yolov8

kay_545 6016

适航规章、标准,书籍资料下载汇总(增加DO-160G中英文版)

很多读者之前问我有没有DO-160G的资源,现在终于找到啦!如果大家有其他想要的资源,可以在留言区告诉我,有空我会帮大家找找看~文末有下载链接:更新日志:2024-9-28:初版。2024-10-21:增加DO-330英文版PDF下载。2024-10-30:增加DO-160G中文版(非机翻)和英文版PDF下载。以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2754

深度学习之经典神经网络框架详解(八):GoogLeNet:Inception-v4

Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 简述: 残差神经网络(ResNet)框架在2015年ILSVRC挑战赛中达到了当时最好的性能,作者考虑将Inception与ResNet相结合是否有益处,并通过实验证明了残差神经网络的加入能够显著加速Inception的训练且表现更好。...

Superstar02的博客 868

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 389

使用TensorFlow-Slim实现Inception模块

注:在TensorFlow的GitHub代码库上可以找到完整的Inception-v3模型的源码(网址为https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/slim/python/slim/nets/inception_v3.py)直接使用TensorFlow原始API实现一个卷积层:with tf.vari

疯狂的兔子 1982

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【学习日记】人脸识别FaceNet之深度卷积网络NN2解读

这篇日记解读FaceNet的深度卷积网络NN2,并使用Tensorflow实现。NN2网络的结构如下图所示:NN2网络几乎和Inception V1一样,所以如果没有Inception V1的基础,依靠上面这张表格使用Tensorflow实现代码还是有点困难的。这里先介绍inception模块。inception模块是由谷歌发明的,并在2014年ILSVRC比赛中获得第一名。其主要解决两个问题:1...

Lauyeed的博客 3152

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WPFDevelopers 快速指南:三步上手,5 大场景搭出现代化 WPF 桌面应用

WPFDevelopers 是一个聚合基础控件与自定义控件的 WPF 控件库,涵盖 20+ 控件分类,帮助开发者快速构建现代化 WPF 桌面应用。本文不逐个罗列控件,而是按"场景"归纳 10 个最常用的控件,读完后可以直接对照自己的界面选型。 ## 为什么选择 WPFDevelopers - 20+ 控件分类,源码全部开放,可复用也可参考实现 - 导航、进度、选择、布局等高频场景齐备,无需从零

gitblog_00099的博客 377

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

零成本做专业剪辑:Clypra 开源视频编辑器上手指南

剪一条 5 分钟的长视频,要在时间线上反复拖动、缩放、找剪辑点;加一条字幕轨道,预览就开始掉帧。对很多人来说,剪辑的时间成本不在创意,而在等待。Clypra 是一款开源视频编辑器:Rust 写核心、Tauri v2 做壳、React 19 做界面,覆盖 macOS、Windows、Linux,MIT 许可,全部功能免费,没有水印和功能限制。 ## 它到底是什么 Clypra 是桌面优先的视频剪

gitblog_00902的博客 892

GoogLeNet架构解析:Inception模块与高效CNN设计

卷积神经网络(CNN)通过局部连接和权值共享实现高效特征提取,其核心在于感受野设计与参数优化。GoogLeNet提出的Inception模块创新性地采用并行多尺度卷积结构,结合1×1卷积降维技术,在ImageNet竞赛中以6.67%的Top-5错误率刷新记录。该架构通过bottleneck设计将参数量降低85%,解决了深度网络部署时的显存占用和计算延迟问题。典型应用场景包括医疗影像分类和目标检测,其中多尺度特征融合和模块化设计思想深刻影响了MobileNet、EfficientNet等后续模型。现代工程实践

weixin_33708432的博客 333

深度学习四大经典CNN网络解析与TensorFlow实现

卷积神经网络(CNN)作为计算机视觉的核心技术,通过局部连接和权值共享有效提取图像特征。从AlexNet首次证明深度学习的潜力,到VGGNet展示网络深度的重要性,再到GoogleNet的Inception模块和ResNet的残差连接,这些经典架构奠定了现代CNN的基础。其中ReLU激活函数解决了梯度消失问题,Dropout正则化有效防止过拟合,而残差学习则使训练超深层网络成为可能。这些技术广泛应用于图像分类、目标检测等场景,本文通过TensorFlow代码实现详细解析AlexNet、VGGNet、Goog

weixin_30920513的博客 384

(二,2NN-QI)Tensorflow--卷积神经网络代码解剖

卷积神经网络 本篇文章为通过tensorflow实现卷积神经网络,结合第一章的理论部分,将对Tensorflow的代码每一句进行分析,一共分为了两部分,第一部分的案例为LeNet5卷积神经网络,第二部分为inception-v3模型。通过迁移学习从而实现对复杂卷积神经网络的应用。

Minion_Yellow的博客 548

Inception-v4.tf_in1k性能优化:12.3 GMACs的计算效率提升技巧

想要在图像分类任务中获得卓越性能,同时保持高效的计算效率吗?Inception-v4.tf_in1k模型正是您需要的解决方案!这款基于Google Inception架构的深度学习模型,通过12.3 GMACs的计算复杂度,在ImageNet-1k数据集上实现了出色的分类精度与效率平衡。本文将为您揭示如何充分利用这款模型的性能优势,并分享实用的优化技巧。 ## 🔥 为什么选择Inception

gitblog_00692的博客 1044

【Tensorflow】tf.nn.separable_conv2d如何实现深度可分卷积?

实验环境:tensorflow版本1.2.0,python2.7介绍tf.nn.separable_conv2d可以看做,深度卷积tf.nn.depthwise_conv2d的扩展,所以首先我们需要了解depthwise_conv2d,可以查看我的另一篇博客: 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?tf.nn.separable_conv2d(inpu

xf__mao的博客 2万+

3 分钟把视频号视频存进电脑:res-downloader 网络资源下载器实操

你在视频号刷到一条想留下的视频,界面却只有转发和录屏两个选项;翻 F12 又只看见一堆加密参数。这就是 res-downloader(爱享素材下载器)要解决的痛点:它是一款跨平台的网络资源下载器,靠代理抓包自动嗅探视频、音频、图片、m3u8、直播流,筛出来直接列表下载。本文带你从安装走到第一次下载,再拆它藏了哪些功能。 ## 先说清它是个什么东西 它不是让你贴链接的下载器,而是抓包式的资源嗅探

gitblog_01022的博客 674

tf_trt_models核心组件解析:classification与detection模块的底层实现原理

TensorFlow模型在部署时常常面临性能瓶颈,而tf_trt_models项目通过NVIDIA TensorRT技术为TensorFlow模型提供了强大的加速能力。本文将深入解析其核心组件classification与detection模块的底层实现原理,帮助开发者理解如何利用这一工具实现高效的模型推理。 ## 一、classification模块:图像分类的高效实现 ### 1.1 模型

gitblog_00429的博客 675

2021-08-30Google Inception v3 Net的实现

本篇文章主要是为了让自己熟悉tf.nn的一些常用函数,所以基于tf.nn自己搭建了一个inception v3的网络,以下是完整代码,如果存在错误还请大家指正 import warnings warnings.filterwarnings('ignore') import tensorflow as tf import numpy as np #第一个模块 class block1(): def __init__(self) -> None: pass #构建模型的

LJ1120142576的博客 477

如何扩展SENet-Tensorflow:支持自定义数据集与网络架构的终极指南

想要让你的SENet-Tensorflow项目更加强大吗?🤔 本文将为你提供完整的扩展指南,教你如何轻松地为这个优秀的TensorFlow实现添加自定义数据集和网络架构支持!无论你是深度学习新手还是有经验的开发者,这份教程都将帮助你快速上手SENet扩展技术。 ## 什么是SENet-Tensorflow?🔍 SENet-Tensorflow是一个基于TensorFlow的Squeeze

gitblog_00166的博客 668
上一篇: tensorflow手动复现论文中的Resnet34结构(不借助keras和slim模块)
下一篇: MATLAB图像处理常用函数
CExploer
博客等级 码龄8年 147粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值