直接看代码:

一、tensorflow

#tensorflow
import tensorflow as tf
import random
import numpy as np x_data = np.random.randn(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3
weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.Variable(tf.zeros([1])) y = weights * x_data + biases
losses = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(losses) init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
for step in range(10):
sess.run(train)
print(step, sess.run(weights), sess.run(biases))

2、pytorch

#pytorch
import torch
import numpy as np x_data = np.random.randn(100).astype(np.float32)
y_data = x_data * 0.3 + 0.1
x_data = torch.from_numpy(x_data)
y_data = torch.from_numpy(y_data) weights = torch.rand(1,requires_grad=True)
biases = torch.zeros(1,requires_grad=True)
print("初始参数weights:{}, biases:{}".format(weights.data, biases.data))
parameters = [weights, biases] criterion = torch.nn()
optimizer = torch.optim.SGD(parameters, 0.5)
for i in range(10):
y = weights * x_data + biases
losses = criterion(y_data, y)
print(losses.data, weights.data, biases.data)
optimizer.zero_grad()
losses.backward()
optimizer.step()

三、keras

#keras
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
import numpy as np x_data = np.random.randn(100).astype(np.float32)
y_data = x_data * 0.3 + 0.1 model = Sequential() model.add(Dense(input_dim=1, units=1)) model.compile(loss="mse", optimizer=SGD(lr=0.5))
for i in range(10):
losses = model.train_on_batch(x_data, y_data)
w, b = model.get_weights()
print(losses, w, b)

接下来我们再细说他们各自的一些异同:

不同点:

  • pytorch要求输入的是tensor,而tensorflow和keras可以是numpy;
  • tensorflow1.x是静态图,我们可以先定义好相关的操作,然后在session中执行即可;pytorch使用的是动态图,我们要在循环的过程中计算相关的损失;keras封装的更高级,只需要像model.compile()中传入损失函数以及优化方法,我们不用显示计算;
  • tensorflow要求在定义好计算图之后,在Session()执行图上的计算操作;
  • tensorflow初始化参数的时候是定义一个tf.initialize_all_variables(),然后在session中首先执行初始化操作:sess.run(init);pytorch是将相关的参数封装成一个列表,然后传入给优化器;至于keras(我知道的是使用Sequential()来构建模型,不知道有没有自定义的参数实现,不使用类);
  • tensorflow使用optimizer.minimize(losses)来最小化损失,pytorch使用loss.backward(),optimizer.step(),实质都是使用反像传播算法不断优化参数使得损失最小化;keras直接使用model.train_on_batch()即可;

相同点:

  • 总体思路是一致的:输入数据---》定义参数--》计算损失--》定义优化器--》循环迭代,最小化损失。

总结:这只是一个简单的对比,但是这么一套流程,就可以套用到各种神经网络中了,只是数据的处理、网络结构的搭建等不同。

pytorch和tensorflow的爱恨情仇之一元线性回归例子(keras插足啦)的更多相关文章

  1. pytorch和tensorflow的爱恨情仇之基本数据类型

    自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀...) 无论学习什么框架或者是什么编程语言,最基础 ...

  2. pytorch和tensorflow的爱恨情仇之定义可训练的参数

    pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch版本:1.6.0 tensorflow版本:1.15.0 之前我们就已 ...

  3. pytorch和tensorflow的爱恨情仇之张量

    pytorch和tensorflow的爱恨情仇之基本数据类型:https://www.cnblogs.com/xiximayou/p/13759451.html pytorch版本:1.6.0 ten ...

  4. pytorch和tensorflow的爱恨情仇之参数初始化

    pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch和tensorflow的爱恨情仇之定义可训练的参数 pytorch版本 ...

  5. Menu与ActionBar的爱恨情仇

    最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...

  6. web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决

    [问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...

  7. 注解:大话AOP与Android的爱恨情仇

    转载:大话AOP与Android的爱恨情仇 1. AOP与OOP的区别 平时我接触多的就是OOP(Object Oriented Programming面向对象).AOP(Aspect Oriente ...

  8. 除了love和hate,还能怎么表达那些年的“爱恨情仇”?

    实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...

  9. 对json的爱恨情仇

    本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...

随机推荐

  1. 分布式监控系统之Zabbix 使用SNMP、JMX信道采集数据

    前文我们了解了zabbix的被动.主动以及web监控相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14024212.html:今天我们来了解下zabb ...

  2. 细说FL Studio中的Wasp合成器功能

    FL Studio 简称FL,因其Logo像水果,故国人亲切的叫他"水果"本章节采用图文结合的方式给大家讲解FL Studio中的Wasp合成器功能.感兴趣的朋友可以一起来交流哦. ...

  3. guitar pro 系列教程(十):关于Guitar Pro声部的使用技巧

    作为一个刚接触吉他的萌音乐的玩家,我们在创作吉他谱时一定要注意其中的声部搭配,因为各个声部的配器音色和旋律会对我们的曲子有着非常重要的影响,而声部的把控技术,也可以体现一个音乐人的能力水平的一方面.今 ...

  4. 从本质上学会基于HarmonyOS开发Hi3861(主要讲授方法)

    引言:花半秒钟就看透事物本质的人,和花一辈子都看不透事物本质的人,注定是截然不同的命运 做开发也一样,如果您能看透开发的整个过程,就不会出现"学会了某个RTOS的开发,同样的RTOS开发换一 ...

  5. 分布式监控系统之Zabbix proxy

    前文我们了解了zabbix 使用snmp和jmx信道采集数据的相关使用配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14029864.html:今天我们来 ...

  6. 配置jdb

    目录 注:1)查看当前Linux系统是否已经安装java 1.把jdk文件的压缩包拖入虚拟机 2.找到刚刚拖拽的文件 3.在usr/local下创建jdk的文件夹 4.解压jdk的文件,并存放在刚刚创 ...

  7. [COCI2016-2017#1] Mag 结论证明

    结论:最多包含一个 \(2\),并且不在链的两端点. 证明:我们问题分成两个 \(\texttt{pass}\). \(\texttt{pass 1}\):\(\forall u,s.t.x_{u}\ ...

  8. Java基础教程——泛型

    泛型 Generics:泛型,愿意指"无商标的". 泛型,可以理解为"宽泛的数据类型",就是将类型由原来的具体的类型泛化. 泛型在建立对象时不指定类中属性的具体 ...

  9. Java基础教程——Scanner类

    Scanner属于java.util包. java.util包是Java内置的一个工具包,其中包含一系列常用的工具类,如处理日期.日历.集合类: 如果要使用到该包中的类,必须显式引入包名:import ...

  10. 蓝桥杯 调手表(bfs解法)

    小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时 ...