
pytorch/tensorflow/caffe/onnx
pytorch/tensorflow/caffe/onnx
小鹏AI
深度学习算法工程师,主攻深度学习模型优化部署,辅攻图形图像算法调优。
软件设计师、英伟达Jeston Nano专家认证。
展开
-
Tensorflow 拟合sinx、cosx以及square函数
导入需要的模块import numpy as npfrom matplotlib import pyplot as pltimport tensorflow as tf定义需要的参数类class Config: def __init__(self): self.save_path = './model_sin/sin_cos' # 训练结果保存的路径 self.lr = 0.001 # 学习步长 self.epoches = 1000原创 2020-06-22 09:36:35 · 936 阅读 · 0 评论 -
TensorFlow 使用样本的方式来实现手写数字识别
定义手写数字类应用框架class MNISTApp(): def train(self): pass def predict(self): pass主函数框架if __name__ == "__main__": app = MNISTApp() app.train() app.predict()原创 2020-06-16 17:20:20 · 427 阅读 · 0 评论 -
TensorFlow softmax的使用
将十个数字转换为十个概率,并且十个概率的和是为1的tf.softmax(x,10) # 十个概率,十个概率的和为1如何将获取的概率与标签进行相关联?可以使用的方法:交叉熵点积平方差以交叉熵为例:概率标签0.500.310.20交叉熵的做法是:将概率取对数,得到的结果lll为负数将lll与标签进行相乘,来获取需要的预期值当概率为1的时候为0,也就要求的最小值了缺点就是:当需要的概率为1时候,其他的概率为0,这样会导致其他的概率无解原创 2020-06-15 18:35:58 · 451 阅读 · 0 评论 -
TensorFlow的基本使用(定义常量、变量、四则等)
# -*-coding:utf-8-*-import tensorflow as tfimport numpy as np# 定义常量c1 = tf.constant(123,dtype=tf.float32)c2 = tf.constant(123,dtype=tf.float32)# 四则运算c1_c2_a = tf.add(c1, c2)c1_c2_b = tf.subtract(c1, c2)c1_c2_c = tf.multiply(c1, c2)c1_c2_d = tf原创 2020-06-11 16:45:53 · 576 阅读 · 0 评论 -
TensorFlow 使用样本进行求解平方根
之前用的是使用迭代进行直接的求解但是深度学习最常用的方法是:根据样本学习收集要解决问题的事件样本(一个x对应一个y【x多个,y一个】)平方根的样本是比较好收集的,比如:0.1的样本就是0.01;0.2的样本就是0.04,等等通过样本建立网络,输出作为平方根(更直接,更适应样本)之间的解法是求解argminf(x)argminf(x)argminf(x)目前的解法是求解argminf(x,p)argminf(x,p)argminf(x,p)求的值是p,而不是xp就是要优化的东西通过样本来原创 2020-06-16 15:51:33 · 705 阅读 · 0 评论 -
TensorFlow 使用tensorboard进行手写数字识别准确率的图像化显示
手写数字识别程序本文基于上面这篇文章,将打印出的损失函数值和预测值进行图像化的显示实现的步骤在张量中定义一个汇总的张量self.precise_summary = tf.summary.scalar('precise',self.precise)self.loss_summary = tf.summary.scalar("loss",self.loss)在训练中定义一个filewriter(指明计算图)writer = tf.summary.FileWriter(cfg.logdir, se原创 2020-06-22 10:27:58 · 850 阅读 · 0 评论 -
TensorFlow在拟合函数的时候,为什么需要进行两个全连接并且加上一个激活函数呢?
问题:TensorFlow在进行拟合函数的时候,为什么需要进行两个全连接并且加上一个激活函数呢?首先,我们先提到三层神经元网络三层神经元网络:神经网络的层数,指定的是能够产生训练参数的为一次,像激活函数就不是一层输入层-----隐藏层-----输出层隐藏层的神经元是输入层的神经元的线性变换从最简单的说起如果输入只有一个神经元其中:z=ax+bz = ax + bz=ax+b 是一条直线隐藏层的一个神经元就是一条直线而激活函数的作用(relu)就是将这条直线经过x轴下半部分全部都删原创 2020-06-17 11:28:39 · 816 阅读 · 1 评论 -
使用TensorFlow求平方根的案例
今天弄了一点TensorFlow的知识,寻思嘚瑟一下使用TensorFlow求平方根曾经使用过梯度下降法来求解平方根来着我们先回顾一下:如何使用梯度下降法来求平方根?分为以下步骤:定义函数:y = lambda x : x*x定义损失函数:loss = lambda x : (y(x) - n)**2对损失函数进行求导:dloss_dx = lambda x : 2 * (y(x) - n) * 2 * x使用梯度下降法求△x△x△x:dx = lambda x,lr : -lr * dl原创 2020-06-12 18:19:37 · 1789 阅读 · 0 评论 -
TensorFlow 卷积到底是什么?
卷积是对两个实函数的一种数学运算。例如:我们用一个激光传感器来追踪一艘宇宙飞船的位置激光传感器给出了一个单独的输入x(t)x(t)x(t):表示飞船在时刻ttt的位置这就意味值我们可以在任意的时刻从传感器中读出飞船的位置那么,现在我们的传感器受到了一定程度的噪声干扰。为了降低飞船位置的低噪声估计我们对得到的测量结果进行平均我们不难想到:时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权重。我们可以采用一个加权函数w(a)w(a)w(a)来实现其中原创 2020-06-22 12:05:46 · 274 阅读 · 0 评论 -
TensorFlow 精确率和召回率
精确率按照输出来算、召回率按输入来算男女605010402020精确率:5050+20\frac{50}{50+20}50+2050召回率:2020+20\frac{20}{20+20}20+2020综合召回率和综合精确率是相等的代码实现:利用样本进行手写数字的识别–计算精确率...原创 2020-06-17 09:05:24 · 1073 阅读 · 0 评论 -
深度学习 tf和np的float32和float64为什么不能通用
标量和张量的区别标量比较就是比较标量的本事而张量的比较是比较矩阵,我们不能确定矩阵中所有的元素的长度都是一样的如果在进行比较的时候假设矩阵A和矩阵B比较矩阵A是float32的矩阵B是float64的如果两者要进行相加的时候,需要将每一个张量中的元素靠近另一个张量但是矩阵的元素过多,不能很好的达到统一因此张量中的类型需要相同...原创 2020-07-23 09:57:11 · 2383 阅读 · 2 评论 -
TensorFlow 使用VAE模型进行手写数学图片的创建
如何使用VAE模型进行手写数字图片的创建呢?其实主要依赖于两个发生器,一个是编码,一个是解码实现步骤如下:将数字手写的图片库传入到VAE中经过编码器(卷积神经网络)得到一个语义值(包括手写数字识别的特征,这里我们设置4个维度,分别代表:粗细,弯曲程度等)将获得的四个值进行平均数和标准差的求解,(目的是为了符合正态分布,为什么使用正态分布做随机数,因为正态分布形成的随机数比较精准)使用随机分布发生器进行随机数的生成将获得的随机数进行解码操作,(就是反卷积操作)最后通过全连接得到想要的图片原创 2020-06-29 13:53:00 · 774 阅读 · 0 评论 -
TensorFlow 使用卷积的进行手写数字的识别准确率的验证
导入需要的包import numpy as npfrom matplotlib import pyplot as pltimport tensorflow as tffrom tensorflow.examples.tutorials.mnist.input_data import read_data_sets 定义需要的配置信息类class Config: def __init__(self): self.save_path = './models/P34/conv原创 2020-06-22 10:13:56 · 309 阅读 · 0 评论 -
TensorFlow with方法和tf.variable_scope联合使用的原理
实例代码with tf.variable_scope(get_name()) as scope1: v2 = tf.get_variable('v2', shape=[4,9],initializer=tf.constant_initializer()) with tf.variable_scope(get_name()) as scope2: v3 = tf.get_variable('v3', shape=[4,9],initializer=tf.constant_initializer())原创 2020-07-01 14:51:20 · 5325 阅读 · 0 评论 -
分析tf.reshape(v3, [2,2,3,1,3,1,1,1,1])中[2,2,3,1,3,1,1,1,1]是什么形状?
tf.reshape(v3, [2,2,3,1,3,1,1,1,1])今天学习TensorFlow时候,接触到了张量的形状的变换问题,变换的这个问题比较好理解(理解如下)reshape(tensor, shape, name=None)tensor:被调整维度的张量shape:要调整成什么形状然后结果会返回一个新形状的张量了。当然,我们也需要注意到,形状中的值可以填写-1的,这个-1表示的是可以自动计算这个维度tf.reshape(v3, [2,2,-1,3])对于更改成的.原创 2020-06-12 16:38:29 · 374 阅读 · 0 评论 -
TensorFlow2.0实战:Cats vs Dogs
这意味着在训练过程中,我们只会训练新添加到顶部的网络层,而在网络底部的权重值不会发生变化。一旦我们执行了数据划分,我们就开始计算训练样本数量,然后调用辅助函数来为训练准备数据。我们一旦创建了这些模型,我们就需要修改这些模型顶部的网络层,使之适用于我们的具体问题。由于我们只训练了顶部的几层网络,而不是整个网络,所以训练这三个模型只用了几个小时。在我们开始整个训练过程之前,让我们思考一下,这些模型的大部头其实已经被训练过了。在这之后,我们需要做的仅仅是实例化这个类的对象,然后载入数据即可。原创 2023-01-04 11:38:26 · 1066 阅读 · 0 评论 -
tf.nn库和tf.layers库的比较
tf.nn库提供神经网路相关的操作激活函数(relu、Sigmoid、tanh)dropout层卷积操作池化操作normalizationlossesevaluationtf.layers库主要提供的高层的神经网络,主要和卷积相关的。input()average_pooling1d()average_pooling2d()average_pooling3d()batch_normalization()conv1d()conv2d()conv2d_transpose原创 2020-09-21 17:53:35 · 675 阅读 · 0 评论 -
TensorFlow 使用多项式进行sin函数的拟合操作
定义一个主函数,对sin函数进行显示:if __name__ == "__main__": samples = 200 xs = np.random.uniform(-np.pi, np.pi, [samples]) xs = sorted(xs) ys = sorted(ys) # 使用matplotlib进行图像的显示 plt.plot(xs, ys) plt.show()在主方法中调用SinApp类app = SinApp(Config())with app: xs_tra原创 2020-06-17 13:50:54 · 1472 阅读 · 0 评论 -
TensorFlow one_hot()
0 ------> [0,0,0,0,0,0,00,0,1]1 ------> [0,0,0,0,0,0,00,1,0]i ------> [0,0,0,i,0,0,00,0,0]决定向量的长度的是深度depthi是多少,就从右往左数第几个数字是1如果不使用one_hot()数值就是【0–9】从0-9 数值大拟合一个函数不论是一个样本还是一个参数值最好离0越近越好最好是-2到2之间或者-1到1之间绝对值不要随便的大于2如果使用【0-9】,标签的值就大于2了,不是很好原创 2020-06-15 18:17:04 · 186 阅读 · 0 评论 -
Tensorflow网络模型分析梳理
看一个简单例子,假设我们需要在训练好的VGG网络使用图,并且修改最后一层,将输出改为2,用于fine-tuning新数据。第四个和第五个参数是我们重复的每一层的卷积核数量和大小,第五个就是scope,可用于指定这一层的变量的范围。关于冻结部分层的做法:我们只需要在指定优化器的时候,将我们需要训练的层的变量作为。第一个参数是我们的输入,第二个参数是我们重复的次数,第三个则是我们要用的层。的意义是忽略那些在定义的模型结构中可能存在的而在预训练模型中没有的变量。原创 2023-01-04 10:57:47 · 789 阅读 · 0 评论 -
TensorFlow dense全连接的使用
定义全连接自己定义全连接的时候,通常是下面这样x = (....)w = (....)b = (....)matmul(w,x) + brelu~很是麻烦,我们可以使用TensorFlow自带的功能来做tf.layers.dense(全连接的参数,全连接相乘的第二个维度,激活操作) # 也叫密度链接def dense( inputs, units, # input:输入,units:输出 activation=None, # 使用什么激活函数 use_bias原创 2020-06-15 18:24:11 · 1086 阅读 · 0 评论 -
TensorFlow 更改张量的形状以及转置
首先我们定义一个v3变量v3 = tf.get_variable('v3', shape=[4,9],initializer=tf.constant_initializer())查看v3的形状>>>v3.shapeTensorShape([Dimension(4), Dimension(9)])定义v4更改v3的形状v4 = tf.reshape(v3, [2,2,3,1,3,1,1,1,1])查看v4的形状>>>v3.shapeTensorSh原创 2020-06-12 17:17:11 · 2292 阅读 · 2 评论 -
TensorFlow 手写数字识别——将获取到的图片按照指定的方式显示
需求:从MNIST数据库中获取20张图片,并按照十行两列的形式进行显示导入需要的包文件from tensorflow.examples.tutorials.mnist.input_data import read_data_setsimport numpy as npimport cv2导入文件path = "./MNIST_data"ds = read_data_sets(path)获取二十张训练图片img,lab = ds.train.next_batch(20)原创 2020-06-15 16:08:31 · 404 阅读 · 0 评论 -
onnx 转换、加载、保存、推理、获取每层输出参数
onnx 转换、加载、保存、推理、参数获取原创 2022-11-10 14:18:19 · 3024 阅读 · 1 评论 -
Pytorch转Onnx转TensorRT
首先使用pytorch框架训练深度学习模型,然后使用某些工具将训练好的pytorch模型转为onnx,最后转为tensorRT。目前模型部署的常见做法是pytorch->onnx->tensorRT。找到TensorRT-8.5.1.7文件(这是我自己的版本号)当前文件下会出现resnet18.trt 说明转换成功。将onnx模型转成TensorRT模型。将pytorch模型转成onnx模型。能够正常打印,即onnx模型没有问题。检查onnx模型是否能推理。获取pytorch模型。将onnx文件移动到。原创 2022-11-14 17:21:30 · 1288 阅读 · 1 评论 -
Pytorch模型训练到哪里找预训练模型?
使用预训练模型,我们有两种方式加载torchvison中的模型,然后定义 pretrained=True采用pretrainedmodels模块torchvision方式from torchvision.models.resnet import resnet18net = resnet18(pretrained=True)采用pretrainedmodels模块安装pretrainedmodels模块pip install pretrainedmodels安装好后,我们可以查原创 2021-12-27 11:35:30 · 2486 阅读 · 0 评论 -
Pytorch 分布式训练中DP和DDP的原理和用法
在使用 distributed 包的任何其他函数之前,需要使用 init_process_group 初始化进程组,同时初始化 distributed 包。ring-all-reduce模式没有server节点,worker与worker之间的通信构成一个环。如果是单机多卡,由于一个进程内就只有一个 GPU,所以 rank 也就表示第几块 GPU。因为充当server的GPU需要一定的显存用来保存worker节点计算出的局部梯度。初始化模型,从server节点拉取最新的模型参数(pull),原创 2022-11-14 16:02:16 · 2300 阅读 · 0 评论 -
pytorch 调用lstm
moduleimport torchimport torch.nn as nnclass M(nn.Module): def __init__(self): super().__init__() self.lstm = nn.LSTM(3, 3, 1) # input's dim = 3, hidden'dim = 3, num of lstm = 1 def forward(self, x): out = self.lstm(*x) return outdatadata原创 2021-10-22 10:12:03 · 1466 阅读 · 0 评论 -
LibTorch 使用torch::from_blob出现的问题
LibTorch 使用torch::from_blob出现的问题原创 2022-11-10 15:09:05 · 1523 阅读 · 0 评论 -
Pytorch中BatchNorm2d权重的加载
有关Pytorch中BatchNorm2d权重加载的问题>>> import torch.nn as nn>>> bn = nn.BatchNorm2d(3)>>> list(bn.parameters())[Parameter containing: tensor([1., 1., 1.], requires_grad=True), Parameter containing: tensor([0., 0., 0.], requires_gra原创 2021-10-08 11:24:15 · 757 阅读 · 0 评论 -
解决No module named ’torch._six‘问题
最近升级的pytorch的版本,升级到了2.0。本人也尝试了将pytorch1.10版本下的。文件拷贝到pytorch2.0下,无果。,pytorch2.0 没有。原创 2023-05-30 14:45:59 · 33052 阅读 · 13 评论 -
Pytorch 加载预训练模型的两种方式:torchvision和torch.hub
查看TorchVision中所包含的预训练模型。查看Hub中所包含的预训练模型。原创 2022-11-07 14:31:59 · 1518 阅读 · 0 评论 -
pytorch中ReLU6的inplace参数到底是个啥????
测试代码import torchimport torch.nn as nnrelu1 = nn.ReLU6(True)relu2 = nn.ReLU6(False)inputs1 = torch.tensor([50,-2,6,5,3])inputs2 = torch.tensor([50,-2,6,5,3])x1 = relu1(inputs1)x2 = relu2(inputs2)打印结果 x1 = tensor([6, 0, 6, 5, 3]), x2 = tensor(原创 2021-02-19 09:47:56 · 1293 阅读 · 0 评论 -
Pytorch中transforms的用法整理
导入transformsfrom torchvision import transforms将图片转为Tensortransforms.ToTensor()Normalize标准化mean = [0.5, 0.5, 0.5]std = [0.5, 0.5, 0.5]transforms.Normalize(mean, std)尺度转换transforms.Resize((512, 512))随机裁剪transforms.RandomCrop(512, 512)组合原创 2021-12-15 20:20:00 · 1813 阅读 · 0 评论 -
Pytorch 修改hook源码 获取Per-Layer输出参数(带layer name)
今天在用hook获取每层输出参数的时候,调用pytorch中的API,发现没有好的方法能够将每层的层面一对一的打印处理为此修改了一下hook的源码import torchimport torch.utils.hooks as hooksdef get_output_param(module, datasets): output_param = {} def hook(module, input, output): name = list(module._forward_hooks.key原创 2022-01-14 15:26:53 · 754 阅读 · 0 评论 -
PyTorch ReLU6网络层
对于relu6, 采用:y = min((max(0, x)), 6)定义,即在relu的基础上,限定了特征值的最大值为6,即为6个bernoulli分布。对于relu,采用:y = max(0, x)定义, 即 特征值小于0的即为0, 特征值大于0的不变,相当于x个bernoulli分布。因此,对于一些移动端设备,我们为了提升网络的在移动端(npu之类的),我们采用定点进行推理(限制为6,主要是在移动端int8的低精度的时候,为了也能让模型有很好的特征提取。我们再谈谈MobileNets,原创 2022-11-03 11:19:14 · 986 阅读 · 0 评论 -
聊聊Pytorch2.0的新特性
看提速,提升没有超一倍,相比TensorRT(TensorRT优化的话,一般都是2-6倍左右,当然要算FP16)除了r50,我也试了下dla结构的模型,其中with_dcn是带了自定义cuda实现的pytorch-dcn算子。Pytorch2.0的版本,可能Dynamo会成为主要的模型的parser替代。之后Pytorch转trt、转tvm、转乱七八槽一切也会慢慢往这个上头靠。优化级别还是差些的,性能肯定不是极致,更不如纯手工优化后的。一行代码就能优化你的模型,优化后的模型和往常使用方式一样。原创 2023-01-12 16:44:27 · 1679 阅读 · 1 评论 -
Caffe 维度转换
slice:在某一个维度,按照给定的下标,blob拆分成几块。比如要拆分channel,总数50,下标为10,20,30,40,那就是分成5份,每份10个channel,输出5个layer。concat:在某个维度,将输入的layer组合起来,是slice的逆过程。split:将blob复制几份,分别给不同的layer,这些上层layer共享这个blob。tile:将blob的某个维度,扩大n倍。比如原来是1234,扩大两倍变成11223344。reduction:将某个维度缩减至1维,方原创 2021-10-18 20:49:43 · 431 阅读 · 0 评论