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个 ...
随机推荐
- nginx&http 第三章 惊群
惊群:概念就不解释了. 直接说正题:惊群问题一般出现在那些web服务器上,Linux系统有个经典的accept惊群问题,这个问题现在已经在内核曾经得以解决,具体来讲就是当有新的连接进入到accept队 ...
- solr 笔记
1.sorl其实是对存储的内容,根据相应的域和域的类型先分词,停顿,过滤(大小写转换)等等;然后建立多级索引.对搜索条件也是根据相应的域和域的类型进行分词,停顿,同义词,过滤(大小写转换)等等;然后建 ...
- Linux 笔记1
linux netstat -an | grep 8081 查看端口进程 window netstat -ano|findstr "1433" taskkill -pid ** - ...
- Ceph编译加速的小技巧
总结了几个小技巧,用于在ceph编译过程中,能够更快一点 修改clone的地址 git clone https://github.com/ceph/ceph.git 可以修改成 git clone g ...
- Caused by: java.lang.ClassNotFoundException: com.alibaba.druid.filter.logging.Log4j2Filter
最开始遇到这个错误,百度,网上一堆的清一色解决方案,缺少log4j,引入log4j相关依赖,或者引入slf4j-over-log4j的依赖,但是好像都不行,最后还是谷歌靠谱,直接检索出github上的 ...
- vue中实时监听移动端屏幕高度(采坑后实践)
最近做微信公众号活动,需要首页往input中输入内容,点击input软键盘tabbar被顶起来,网上借鉴很多(踩了许多坑)最后自己实践出来. <--!将手机屏幕的默认高度和实时高度获取--> ...
- 使用Camtasia来消除视频中的声音
大多数情况下,我们在录制电脑屏幕的时候都会把音频输出也一起录制下来,但也会有时候要后期进行重新配音,需要把事先一同录制的音频消除掉,今天小编来给大家说一说如何消除这种的视频声音. 首先打开Camtas ...
- guitar pro 系列教程(十):关于Guitar Pro声部的使用技巧
作为一个刚接触吉他的萌音乐的玩家,我们在创作吉他谱时一定要注意其中的声部搭配,因为各个声部的配器音色和旋律会对我们的曲子有着非常重要的影响,而声部的把控技术,也可以体现一个音乐人的能力水平的一方面.今 ...
- C语言讲义——指针(pointer)
指针是C语言最重要的特性之一, 也是最容易被误解的特性之一. 现代计算机把内存分割为字节(Byte), 每个字节都有唯一的地址(Address), 如果内存中有n个字节,可以把地址看做0~n-1的数. ...
- 痞子衡嵌入式:一个奇怪的Keil MDK下变量链接强制对齐报错问题(--legacyalign)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题. 痞子衡最近一直在参与恩智浦SBL项目(就是一个适用LPC和i.MXRT的完整OT ...