pytorch和tensorflow的爱恨情仇之一元线性回归例子(keras插足啦)
直接看代码:
一、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插足啦)的更多相关文章
- pytorch和tensorflow的爱恨情仇之基本数据类型
自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀...) 无论学习什么框架或者是什么编程语言,最基础 ...
- pytorch和tensorflow的爱恨情仇之定义可训练的参数
pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch版本:1.6.0 tensorflow版本:1.15.0 之前我们就已 ...
- pytorch和tensorflow的爱恨情仇之张量
pytorch和tensorflow的爱恨情仇之基本数据类型:https://www.cnblogs.com/xiximayou/p/13759451.html pytorch版本:1.6.0 ten ...
- pytorch和tensorflow的爱恨情仇之参数初始化
pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch和tensorflow的爱恨情仇之定义可训练的参数 pytorch版本 ...
- Menu与ActionBar的爱恨情仇
最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...
- web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决
[问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...
- 注解:大话AOP与Android的爱恨情仇
转载:大话AOP与Android的爱恨情仇 1. AOP与OOP的区别 平时我接触多的就是OOP(Object Oriented Programming面向对象).AOP(Aspect Oriente ...
- 除了love和hate,还能怎么表达那些年的“爱恨情仇”?
实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...
- 对json的爱恨情仇
本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...
随机推荐
- 使用SpringBoot进行优雅的数据验证
JSR-303 规范 在程序进行数据处理之前,对数据进行准确性校验是我们必须要考虑的事情.尽早发现数据错误,不仅可以防止错误向核心业务逻辑蔓延,而且这种错误非常明显,容易发现解决. JSR303 规范 ...
- c#多播委托判断空值
int resualt = (int)fn?.Invoke(a, b); 其中fn是有两个参数一个int返回值的多播委托,这个看起来很精炼,大概意思也不懂 个人理解为使用先判断fn?,再传值以及输出为 ...
- python+selenium利用cookie记住密码
先上代码 1 from selenium import webdriver 2 from time import sleep 3 4 dr = webdriver.Chrome() 5 dr.get( ...
- Codeforces Round #677 (Div. 3) E、G题解
E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...
- FDR校正
一.假设检验 假设检验的基本思路是: 设立零假设(null hypothesis)H0,以及与零假设H0相对应的非零假设(alternative hypothesis)H1,在假设H0成立的前提下,计 ...
- InnoDB 中的缓冲池(Buffer Pool)
本文主要说明 InnoDB Buffer Pool 的内部执行原理,其生效的前提是使用到了索引,如果没有用到索引会进行全表扫描. 结构 在 InnoDB 存储引擎层维护着一个缓冲池,通过其可以避免对磁 ...
- ubuntu安装vmware
安装过程: 首先直接将光盘文件中的tar.gz复制到桌面,解压过程如下 中间遇到的问题: 在执行的过程中一直在回车,需要输入的全为yes,还有一个是what is the location of th ...
- 整理一下dedecms的相关知识
dedecms更改数据库连接 文件 data/common.inc.php ------------------------------------------------------------ ...
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T4 字符串距离
[2014广州市选day1]JZOJ2020年9月12日提高B组T4 字符串距离 题目 Description 给出两个由小写字母组成的字符串 X 和Y ,我们需要算出两个字符串的距离,定义如下: 1 ...
- Python中动态编译函数compile(source, filename, mode, ......)参数filename的作用是什么?
动态编译函数compile调用语法如下: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) 其中的fi ...