tensorflow/pytorch/mindspore在VGG16前向传播上的性能对比
首先说下mindspore,作为华为的主打软件产品,该计算框架可用性一直较差,不同版本不同计算硬件下的代码往往都不是完全兼容的,也就是说你在mindspore的官网上找到的VGG预训练模型的代码是mindspore-1.5.0的版本在ascend平台的,如果你用mindspore-gpu-1.9.0的版本就无法运行,这是mindspore最常见的错误问题,因此mindspore在VGG16前向传播的性能表现为零,因为根本就无法运行官方的源代码,除非你手动去修改mindspore的框架代码,这事情我去年是会这么干的,今年我说啥也不会干了。如果你给一个开源的产品提了N多的意见,结果过好久一看,啥变化没有,如果非说有变化那就是变得越来越差了,那估计换谁也都不会支持了。
TensorFlow这里使用的是1.14.0版本,由于TensorFlow在1.x和2.x之间上的巨大差异,以及2.x版本的较差使用性,因此这里使用的是TensorFlow的作为经典的版本1.14.0,当然并没有使用TensorFlow的最新版本来比较对于TensorFlow来说并不很公平,但是TensorFlow2.x版本的相关代码和技术博客基本已经从互联网上绝迹,作为一个几乎要濒临灭绝的计算框架在这里使用旧版本也是实属无奈。相关代码参考:
【转载】 Tensorflow如何直接使用预训练模型(vgg16为例)

Pytorch
运行版本gpu1.13.0:

import torch
from torchvision import datasets, models, transforms
import numpy as np # with torch.no_grad():
# model_ft = models.vgg16(pretrained=True).to("cuda:1")
model_ft = models.vgg16(pretrained=True).to("cuda:1") batchsize=32 import time
a_time = time.time()
for _ in range(500):
images = np.random.random(batchsize*224*224*3).reshape(batchsize,3,224,224)
model_ft(torch.tensor(images, dtype=torch.float32, device='cuda:1')) print(time.time()-a_time)

=====================================
运行硬件平台:
CPU: 5.0Ghz下的因特尔10700k
GPU: RTX2070SUPER
其他参数:
batch_size=32
迭代次数:500
对比结果:
mindspore-gpu-1.9.0版本的性能表现:0分(根本无法运行)
TensorFlow-gpu-1.14.0版本的性能表现:用时170秒
Pytorch-gpu-1.13.0版本的性能表现:用时42秒
================================================
PS: 可以看到在现如今的深度学习框架问题上,不论是易用性还是整体性能上pytorch都已经成为了当之无愧的NO.1,虽然TensorFlow也还能用,不过已经在多个方面上被pytorch超越了,如果非说pytorch有不如TensorFlow的地方那估计也就是曾经的历史遗留的项目了,而至于mindspore的gpu版本这里基本可以认为是不可用的状态,当然mindspore框架的主要定位目标平台是ascend平台,所以或许mindspore在ascend平台上会有截然不同的表现也是不可知晓的。
---------------------------------------------------
tensorflow/pytorch/mindspore在VGG16前向传播上的性能对比的更多相关文章
- 吴裕雄 python 神经网络——TensorFlow 三层简单神经网络的前向传播算法
import tensorflow as tf w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2= tf.Variable( ...
- Tomcat 7优化前及优化后的性能对比
Tomcat 7在我们日常开发.测试.生产环境都会使用到,但对于大部分开发人员来说,对其性能还是没有多大了解.本文就对它做一次性能测试,对比优化前后的性能区别. 一.运行环境 CPU: Intel(R ...
- TensorFlow笔记-04-神经网络的实现过程,前向传播
TensorFlow笔记-04-神经网络的实现过程,前向传播 基于TensorFlow的NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型 张量(tenso ...
- Tensorflow实现神经网络的前向传播
我们构想有一个神经网络,输入为两个input,中间有一个hidden layer,这个hiddenlayer当中有三个神经元,最后有一个output. 图例如下: 在实现这个神经网络的前向传播之前,我 ...
- tensorflow 模型前向传播 保存ckpt tensorbard查看 ckpt转pb pb 转snpe dlc 实例
参考: TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式 TensorFlow 模型保存与恢复 snpe tensorflow 模型前向传播 保存ckpt tensor ...
- Tensorflow笔记——神经网络图像识别(一)前反向传播,神经网络八股
第一讲:人工智能概述 第三讲:Tensorflow框架 前向传播: 反向传播: 总的代码: #coding:utf-8 #1.导入模块,生成模拟数据集 import t ...
- 实现属于自己的TensorFlow(一) - 计算图与前向传播
前段时间因为课题需要使用了一段时间TensorFlow,感觉这种框架很有意思,除了可以搭建复杂的神经网络,也可以优化其他自己需要的计算模型,所以一直想自己学习一下写一个类似的图计算框架.前几天组会开完 ...
- tensorflow学习笔记(1)-基本语法和前向传播
tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程. 图中的constant是个常量 计 ...
- [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上)
[源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 目录 [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 0x00 摘要 0x01 总体逻辑 0x02 废弃 ...
- [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下)
[源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 目录 [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 0x00 摘要 0x01 前文回顾 0x02 Te ...
随机推荐
- 神奇的JavaScript弱等价类型转换
JavaScript语言特性 - 类型转换 JavaScript这门语言的类型系统从来没有它表面看起来的那样和善,虽然比起Java.C#等一众强类型语言,它的弱类型使用起来似乎是如此便利,但正因为它极 ...
- 跨域问题CORS笔记
CORS跨域问题 跨域问题简介 跨域资源共享(Cross-origin resource sharing, CORS)是用于让网站资源能被不同源网站访问的一种安全机制,这个机制由浏览器与服务器共同负责 ...
- 每天打卡一小时 第三十一天 PTA520钻石 争霸赛
第一题 源代码 #include<iostream> using namespace std; int main() { int n; cin>>n; cout<< ...
- ElasticSearch服务Java内存异常分析和排查解决
ElasticSearch服务Java内存异常分析和排查解决 1.ElasticSearch业务微服务日志排查java.lang.IllegalStateException: Request cann ...
- 纯代码搭建iOS三级结构(UITabbarController+UINavigationController+UIViewController)
声明:这里所指的三级结构不是网上百度中所经常提及的三级框架或者MVC模式,而是指UITabbarController+UINavigationController+UIViewController. ...
- 单芯片国产ARM+FPGA,复旦微FMQL20SM工业核心板正式发布!
- 使用kafka作为生产者生产数据到hdfs
关键:查看kafka官网的userGuide 配置文件: agent.sources = r1agent.sinks = k1agent.channels = c1 ## sources config ...
- C#中重写(override)及覆盖(new)的区别详解
1. 重写和覆盖的定义 1.1 重写(override)的定义 在C#中,用override关键字来重写一个父类中的虚方法或抽象方法.override关键字用于指示编译器,我要用派生类中的一个方法 ...
- java生成word的解决方案比较
1.Jacob Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.通过Jacob实现了在Java平台上对微软Office的COM接口进行调用. 优点:调 ...
- mysql 二进制的读取与写入
插入语句 用binary转换函数可将字符串转为二进制 insert into mytable (id, bin) values(1, binary('abcdef')) 查询语句 用cast进行类型转 ...