3、pytorch实现最基础的MLP网络
%matplotlib inline
import numpy as np
import torch
from torch import nn
import matplotlib.pyplot as plt d = 1
n = 200
X = torch.rand(n,d) #200*1, batch * feature_dim
#y = 3*torch.sin(X) + 5* torch.cos(X**2)
y = 4 * torch.sin(np.pi * X) * torch.cos(6*np.pi*X**2) #注意这里hid_dim 设置是超参数(如果太小,效果就不好),使用tanh还是relu效果也不同,优化器自选
hid_dim_1 = 128
hid_dim_2 = 32
d_out = 1 model = nn.Sequential(nn.Linear(d,hid_dim_1),
nn.Tanh(),
nn.Linear(hid_dim_1, hid_dim_2),
nn.Tanh(),
nn.Linear(hid_dim_2, d_out)
)
loss_func = nn.MSELoss()
optim = torch.optim.SGD(model.parameters(), 0.05) epochs = 6000
print("epoch\t loss\t")
for i in range(epochs):
y_hat = model(X)
loss = loss_func(y_hat, y)
optim.zero_grad()
loss.backward()
optim.step()
if((i+1)%100 == 0):
print("{}\t {:.5f}".format(i+1,loss.item())) #这个地方容易出错,测试时不要用原来的x,因为原来的x不是从小到达排序,导致x在连线时会混乱,所以要用np.linspace重新来构造
test_x = torch.tensor(np.linspace(0,1,50), dtype = torch.float32).reshape(-1,1)
final_y = model(test_x)
plt.scatter(X,y)
plt.plot(test_x.detach(),final_y.detach(),"r") #不使用detach会报错
print("over")
epoch loss
100 3.84844
200 3.83552
300 3.78960
400 3.64596
500 3.43755
600 3.17153
700 2.59001
800 2.21228
900 1.87939
1000 1.55716
1100 1.41315
1200 1.26750
1300 1.05869
1400 0.91269
1500 0.81320
1600 0.74047
1700 0.67874
1800 0.61939
1900 0.56204
2000 0.51335
2100 0.47797
2200 0.45317
2300 0.43151
2400 0.40505
2500 0.37628
2600 0.34879
2700 0.32457
2800 0.30431
2900 0.28866
3000 0.30260
3100 0.26200
3200 0.30286
3300 0.25229
3400 0.21422
3500 0.22737
3600 0.22905
3700 0.19909
3800 0.24601
3900 0.17733
4000 0.22905
4100 0.15704
4200 0.21570
4300 0.14141
4400 0.14657
4500 0.14609
4600 0.11998
4700 0.12598
4800 0.10871
4900 0.08616
5000 0.18319
5100 0.08111
5200 0.08213
5300 0.11087
5400 0.06879
5500 0.07235
5600 0.11281
5700 0.06817
5800 0.08423
5900 0.06886
6000 0.06301

3、pytorch实现最基础的MLP网络的更多相关文章
- 07_利用pytorch的nn工具箱实现LeNet网络
		
07_利用pytorch的nn工具箱实现LeNet网络 目录 一.引言 二.定义网络 三.损失函数 四.优化器 五.数据加载和预处理 六.Hub模块简介 七.总结 pytorch完整教程目录:http ...
 - 你必须了解的基础的 Linux 网络命令
		
Linux 基础网络命令列表 我在计算机网络课程上使用 FreeBSD,不过这些 UNIX 命令应该也能在 Linux 上同样工作. 连通性 ping <host>:发送 ICMP ech ...
 - JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
		
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
 - 基础的 Linux 网络命令,你值得拥有
		
导读 有抱负的 Linux 系统管理员和 Linux 狂热者必须知道的.最重要的.而且基础的 Linux 网络命令合集.在 It's FOSS 我们并非每天都谈论 Linux 的"命令行方面 ...
 - 黑马程序员:Java基础总结----GUI&网络&IO综合开发
		
黑马程序员:Java基础总结 GUI&网络&IO综合开发 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络架构 C/S:Client/Server ...
 - Java基础教程:网络编程
		
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
 - Linux基础入门之网络属性配置
		
Linux基础入门之网络属性配置 摘要 Linux网络属性配置,最根本的就是ip和子网掩码(netmask),子网掩码是用来让本地主机来判断通信目标是否是本地网络内主机的,从而采取不同的通信机制. L ...
 - 【转载】[基础知识]【网络编程】TCP/IP
		
转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops 胖友们楼主我又 ...
 - 10个基础的linux网络和监控命令
		
配置zookeeper集群时,需要查看本机ip,输入命令 hostname -i 就会只显示主机ip, 下边搜了一篇常用的 命令,闲的时候多敲敲命令,以便用的时候再找! 我下面列出来的10个 ...
 
随机推荐
- solr全文检索学习
			
序言: 前面我们说了全局检索Lucene,但是我们发现Lucene在使用上还是有些不方便的,例如想要看索引的内容时,就必须自己调api去查,再例如一些添加文档,需要写的代码还是比较多的 另外我们之前说 ...
 - php post请求https
			
<?php $url = 'https://www.xxx.com'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); c ...
 - git commit后如何取消commit
			
在git使用中要如何取消commit但是还未push的操作? 通常,我们对修改的文件会先git add .,然后git commmit -m "注释",但是如果commit错了,想 ...
 - 用rsync备份一台linux服务器上的数据
			
rsync是安装完linux后都会自带的,在机器上运行rsync命令看是否有安装即可 备份到远程服务器 这里介绍的rsync的用途是备份一台linux服务器上的数据到另外一台机器 环境 将需要备份机器 ...
 - Python_爬虫伪装_ scrapy中fake_userAgent的使用
			
scrapy 伪装代理和fake_userAgent的使用 伪装浏览器代理 在爬取网页是有些服务器对请求过滤的不是很高可以不用ip来伪装请求直接将自己的浏览器信息给伪装也是可以的. 第一种方法: 1. ...
 - C++ const的自我理解
			
C++学习笔记–const const 是 constant 的缩写,本意是不变的,不易改变的意思.在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数. C++ const ...
 - 面试官:你说你精通源码,那你知道ArrayList 源码的设计思路吗?
			
Arraylist源码分析 ArrayList 我们几乎每天都会使用到,但是通常情况下我们只是知道如何去使用,至于其内部是怎么实现的我们不关心,但是有些时候面试官就喜欢问与ArrayList 的源码相 ...
 - 面试阿里,字节,美团必看的Spring的Bean管理详解
			
IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...
 - 正则表达式——maltrail工程项目中使用
			
1. 正则表达所需语法 \ 正则表达式使用反斜杠字符 ('') 来表示特殊形式或是允许在使用特殊字符时不引发它们的特殊含义. 转义特殊字符(允许你匹配 '*', '?', 或者此类其他) \A 只匹配 ...
 - FL Studio钢琴卷轴之画笔工具
			
在FL Studio中,钢琴卷轴窗口是制作音乐很重要的一个窗口,大部分音乐编辑的工作都要在该窗口中完成.钢琴卷轴的概念来源于旧时自动机械钢琴所使用的纸质卷轴,在钢琴卷轴中,纵轴代表音符的高度,横轴代表 ...