python构建
㈠ 使用 python 和 Pygame 模块构建一个游戏框架
在我的 这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的、基于文本的骰子 游戏 。这次,我将展示如何使用 Python 模块 Pygame 来创建一个图形化 游戏 。它将需要几篇文章才能来得到一个确实做成一些东西的 游戏 ,但是到这系列的结尾,你将更好地理解如何查找和学习新的 Python 模块和如何从其基础上构建一个应用程序。
在开始前,你必须安装 Pygame 。
有几种方法来安装 Python 模块,但是最通用的两个是:
两个方法都工作的很好,并且每一个都有它自己的一套优势。如果你是在 linux 或 BSD 上开发,可以利用你的发行版的软件存储库来自动和及时地更新。
然而,使用 Python 的内置软件包管理器可以给予你控制更新模块时间的能力。而且,它不是特定于操作系统的,这意味着,即使当你不是在你常用的开发机器上时,你也可以使用它。pip 的其它的优势是允许本地安装模块,如果你没有正在使用的计算机的管理权限,这是有用的。
如果 Python 和 Python3 都安装在你的系统上,你想使用的命令很可能是 pip3,它用来区分 Python 2.x 的 pip 的命令。如果你不确定,先尝试 pip3。
pip 命令有些像大多数 Linux 软件包管理器一样工作。你可以使用 search 搜索 Python 模块,然后使用 install 安装它们。如果你没有你正在使用的计算机的管理权限来安装软件,你可以使用 --user 选项来仅仅安装模块到你的家目录。
Pygame 是一个 Python 模块,这意味着它仅仅是一套可以使用在你的 Python 程序中的库。换句话说,它不是一个像 IDLE 或 Ninja-IDE 一样可以让你启动的程序。
一个电子 游戏 需要一个背景设定:故事发生的地点。在 Python 中,有两种不同的方法来创建你的故事背景:
你的背景仅是一张图片或一种颜色。你的电子 游戏 人物不能与在背景中的东西相互作用,因此,不要在后面放置一些太重要的东西。它仅仅是设置装饰。
要开始一个新的 Pygame 工程,先在计算机上创建一个文件夹。 游戏 的全部文件被放在这个目录中。在你的工程文件夹内部保持所需要的所有的文件来运行 游戏 是极其重要的。
一个 Python 脚本以文件类型、你的姓名,和你想使用的许可证开始。使用一个开放源码许可证,以便你的朋友可以改善你的 游戏 并与你一起分享他们的更改:
然后,你告诉 Python 你想使用的模块。一些模块是常见的 Python 库,当然,你想包括一个你刚刚安装的 Pygame 模块。
由于你将用这个脚本文件做很多工作,在文件中分成段落是有帮助的,以便你知道在哪里放代码。你可以使用块注释来做这些,这些注释仅在看你的源文件代码时是可见的。在你的代码中创建三个块。
接下来,为你的 游戏 设置窗口大小。注意,不是每一个人都有大计算机屏幕,所以,最好使用一个适合大多数人的计算机的屏幕大小。
这里有一个方法来切换全屏模式,很多现代电子 游戏 都会这样做,但是,由于你刚刚开始,简单起见仅设置一个大小即可。
在脚本中使用 Pygame 引擎前,你需要一些基本的设置。你必须设置帧频,启动它的内部时钟,然后开始 (init)Pygame 。
现在你可以设置你的背景。
在你继续前,打开一个图形应用程序,为你的 游戏 世界创建一个背景。在你的工程目录中的 images 文件夹内部保存它为 stage.png 。
这里有一些你可以使用的自由图形应用程序。
你的图像不必很复杂,你可以以后回去更改它。一旦有了它,在你文件的 Setup 部分添加这些代码:
如果你仅仅用一种颜色来填充你的 游戏 的背景,你需要做的就是:
你也必须定义颜色以使用。在你的 Setup 部分,使用红、绿、蓝 (RGB) 的值来创建一些颜色的定义。
至此,你理论上可以启动你的 游戏 了。问题是,它可能仅持续了一毫秒。
为证明这一点,保存你的文件为 your-name_game.py(用你真实的名称替换 your-name)。然后启动你的 游戏 。
如果你正在使用 IDLE,通过选择来自 “Run” 菜单的 “Run Mole” 来运行你的 游戏 。
如果你正在使用 Ninja,在左侧按钮条中单击 “Run file” 按钮。
你也可以直接从一个 Unix 终端或一个 Windows 命令提示符中运行一个 Python 脚本。
如果你正在使用 Windows,使用这命令:
启动它,不过不要期望很多,因为你的 游戏 现在仅仅持续几毫秒。你可以在下一部分中修复它。
除非另有说明,一个 Python 脚本运行一次并仅一次。近来计算机的运行速度是非常快的,所以你的 Python 脚本运行时间会少于 1 秒钟。
为强制你的 游戏 来处于足够长的打开和活跃状态来让人看到它(更不要说玩它),使用一个 while 循环。为使你的 游戏 保存打开,你可以设置一个变量为一些值,然后告诉一个 while 循环只要变量保持未更改则一直保存循环。
这经常被称为一个“主循环”,你可以使用术语 main 作为你的变量。在你的 Setup 部分的任意位置添加代码:
在主循环期间,使用 Pygame 关键字来检查键盘上的按键是否已经被按下或释放。添加这些代码到你的主循环部分:
也是在你的循环中,刷新你世界的背景。
如果你使用一个图片作为背景:
如果你使用一种颜色作为背景:
最后,告诉 Pygame 来重新刷新屏幕上的所有内容,并推进 游戏 的内部时钟。
保存你的文件,再次运行它来查看你曾经创建的最无趣的 游戏 。
退出 游戏 ,在你的键盘上按 q 键。
在这系列的 下一篇文章 中,我将向你演示,如何加强你当前空空如也的 游戏 世界,所以,继续学习并创建一些将要使用的图形!
via: https://opensource.com/article/17/12/game-framework-python
作者: Seth Kenlon 选题: lujun9972 译者: robsean 校对: wxy
㈡ 教女朋友学Python(一)运行环境搭建
下班比较早,吃了饭没什么事,就和女朋友一起研究了Python。
编程语言有很多,为什么选择它呢?因为它火吧,没什么好解岩行洞释的,下面开始第一步,环境搭建。网上的教程实在太多,各种系统的各种版本,本地链接下载,有真有假,乱七八糟。这里是官网
我这里下载的是最新版,有关Python2到Python3有许多不兼容的问题,我想大家应该不需要担心,因为以后Python3肯带敏定是主流,官方会尽快处理,所以新手学习还是从Python3开始吧。
进去之后会看到:
别的不要点了,按照这个顺序来就可以,反正我是这么做的,公司电脑是windows7
download-windows-python 3.6.3
然后开始下载。
几分钟之后(网速有点慢),打开下载文件python-3.6.3.exe,一步步next就可以了。不过为了免去配置环境变量这一步,要在下图位置打上勾:
然后可以默认安装路径,也可以选择自定义安装,就是costomize installation,路径中应该是不能有中文。如下:
稍等即可。显示如下图setup was successful就表示成功了。
那么怎么让这个东西跑起来呢?这里:
输入 idle ,回车,然后出来这么个东西:
完成。那三个大于号一样的东西表示程序准备就绪粗枯,就等你来操作了。上面是版本信息等,具体不解释。
下面是昨天晚上我女朋友敲出来的简单代码,我们属于新手入门,大家看看就好。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Python
3.6
.
3
(v3.
6.3
2c5fed8
,
Oct
3
2017
,
17
26
49) [MSC v.
1900
32
bit (Intel)] on win32
Type
right
,
credits
or
license()㈢ 基于python如何建立人脸库
您好,基于Python建立人脸库的方法如下:
1. 安装Python和相关包:首先,您需要安装Python和相关的包,如OpenCV、NumPy等,以便使用Python来处理图像和视频。
2. 获取人脸数据:您需此盯要获取足够多的人脸数据,以便训练模型。
3. 提取特征:使用Python中的OpenCV库,您可以提取人脸图像中的特征,以便进行识别。
4. 训练模型:使用提取的特征,您可以训练一个机器学习森败和模型,以便识别不同的人脸。
5. 测试模型:最后,您可以使用测试数据来测试模型的准确性,以确保它能够准确地识别不同枯旁的人脸。
㈣ 如何用Python搭建一个网站
Python搭建网站,利用现成的框架还是挺简单的。在这滑咐里举一个例子-利用Flask搭建一个网站。
Flask
Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug,模板引擎则使用Jinja2。Flask创建一个应用很简单,只需要一行代码就可以创建一个应用。一个最小的应用看起来像这样:
直接执行pythonhello.py,就可以看到页面就可以访问了,这只是官方给出的一个示例,方便学习。
应用初始化
所有Flask程序都必须创建一个程序实例。Web服务器使用一种名为Web服务器网关接口(WebServerGatewayInterface,WSGI)的协议,把接收自客户端的所有请求都转交给这个对象处理。程序实例是Flask类的对象,经常使用下述代码创建:
Flask类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,Python的__name__变量就是所需的值。
路由和视图函数
客户端(例如Web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例。程备余序实例需要知道对每个URL请求运行哪些代码,所以保存了一个URL到Python函数的映射关系。处理URL和函数之间关系的程序称为路由。在Flask程序中定义仿让滚路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由。下面的例子说明了如何使用这个修饰器声明路由:
index()函数注册为程序根地址的处理程序。如果部署程序的服务器域名为,在浏览器中访问p>
启动服务器
程序实例用run方法启动Flask集成的开发Web服务器:
__name__=='__main__'是Python的惯常用法,在这里确保直接执行这个脚本时才启动开发Web服务器。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行app.run()。服务器启动后,会进入轮询,等待并处理请求。轮询会一直运行,直到程序停止,比如按Ctrl-C键。
Flask开发的网站实例
本示例中网站的结构如下
启动服务器界面
访问WEB页面
整个是利用Flask自己搭建的一个WEB页面,数据库试过mysql和mongodb都可以正常访问。整体感觉Flask的学习成本会比Django低,而且也比Django更灵活。
㈤ 如何构建python环境
1、概念区分
对于刚刚开始学习Python的零基础小白来说,可能很容易就会对Pycharm、Python解释器、conda安装、pip安装这个几个概念混淆。下面跟着我来逐一认识一下它们:
(1)Pycharm是Pytho开发的集成开发环境(Integrated Development Environment,简称IDE),它本身无法执行Python代码。
(2)Python解释器才是真正执行代码的工具,pycharm里可设置Python解释器,一般我们可去Python官网下载Python3.7或Python3.8版本;如果安装过anaconda ,它里面必然也包括一个某版本的Python解释器;Pycharm配置Python解释器选择哪一个都可以。
(3)anaconda是把python所有常用包的合集,并提供给我们使用 conda 命令非常非常方便的安装各种Python包。
(4)conda安装:我们安装过anaconda软件后,就能够使用conda命令下载anaconda源里(比如中科大镜像源)的包。
(5)pip安装:也是一种类似于conda安装的python安装方法,如果用过Centos系统,它就像yum安装一样。
2、修改镜像源
在使用安装 conda 安装某些包会出现慢或安装失败问题,最有效方法是修改镜像源为国内镜像源。之前都选用清华镜像源,但是2019年后已停止服务。推荐选用中科大镜像源。
先查看已经安装过的镜像源,cmd窗口执行命令:
conda config --show
查看配置项 channels ,如果显示带有 tsinghua ,则说明已安装过清华镜像。
channels:
https://mirrors.tuna.tsinghua.e.cn/tensorflow/linux/cpu/
https://mirrors.tuna.tsinghua.e.cn/anaconda/cloud/msys2/
https://mirrors.tuna.tsinghua.e.cn/anaconda/cloud/conda-forge/
https://mirrors.tuna.tsinghua.e.cn/anaconda/pkgs/free/
https://mirrors.tuna.tsinghua.e.cn/anaconda/cloud/pytorch/
下一步,使用 conda config --remove channels url地址 删除清华镜像,如下命令删除第一个。然后,依次删除所有镜像源
conda config --remove channels https://mirrors.tuna.tsinghua.e.cn/tensorflow/linux/cpu/
添加目前可用的中科大镜像源:
conda config --add channels https://mirrors.ustc.e.cn/anaconda/pkgs/free/
并设置搜索时显示通道地址:
conda config --set show_channel_urls yes
确认是否安装镜像源成功,执行 conda config --show ,找到 channels 值为如下:
channels:
https://mirrors.ustc.e.cn/anaconda/pkgs/free/
defaults
以上就是分享的Python基础学习之环境搭建的全部学习内容,大家都看懂了吗?希望本文的分享能帮到大家!
㈥ 怎么用python建立一个用户名列表
1、首先,我们需要打开Python,建立一个程序。
2、其次该程序具有一个函数,该函数将名字和姓氏作为参数,并创建一个用户名。
3、最后使用sys.argv完成建立即可。
㈦ python虚拟环境搭建
当前python有多个版本,所以输入命令的时候在不同的场景可能会需要不同的python版本。
就需要安装python的虚拟环境,方便快速切换python的版本。
安装python虚拟环境
sudo apt-get install python-virtualenv
sudo apt-get install virtualenvwrapper
创建虚拟环境
mkdir .virtualenvs
vi ~/.bashrc
插入如下两行
export WORKON_HOME=$HOME/.virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
然后执行
source ~/.bashrc
mkvirtualenv -p /usr/bin/python3.8 py3env
source py3env/bin/activate
㈧ 从零开始用Python构建神经网络
从零开始用Python构建神经网络
动机:为了更加深入的理解深度学习,我们将使用 python 语言从头搭建一个神经网络,而不是使用像 Tensorflow 那样的封装好的框架。我认为理解神经网络的内部工作原理,对数据科学家来说至关重要。
这篇文章的内容是我的所学,希望也能对你有所帮助。
神经网络是什么?
介绍神经网络的文章大多数都会将它和大脑进行类比。如果你没有深入研究过大脑与神经网络的类比,那么将神经网络解释为一种将给定输入映射为期望输出的数学关系会更容易理解。
神经网络包括以下组成部分
? 一个输入层,x
? 任意数量的隐藏层
? 一个输出层,?
? 每层之间有一组权值和偏置,W and b
? 为隐藏层选择一种激活函数,σ。在教程中我们使用 Sigmoid 激活函数
下图展示了 2 层神经网络的结构(注意:我们在计算网络层数时通常排除输入层)
2 层神经网络的结构
用 Python 可以很容易的构建神经网络类
训练神经网络
这个网络的输出 ? 为:
你可能会注意到,在上面的等式中,输出 ? 是 W 和 b 函数。
因此 W 和 b 的值影响预测的准确率. 所以根据输入数据对 W 和 b 调优的过程就被成为训练神经网络。
每步训练迭代包含以下两个部分:
? 计算预测结果 ?,这一步称为前向传播
? 更新 W 和 b,,这一步成为反向传播
下面的顺序图展示了这个过程:
前向传播
正如我们在上图中看到的,前向传播只是简单的计算。对于一个基本的 2 层网络来说,它的输出是这样的:
我们在 NeuralNetwork 类中增加一个计算前向传播的函数。为了简单起见我们假设偏置 b 为0:
但是我们还需要一个方法来评估预测结果的好坏(即预测值和真实值的误差)。这就要用到损失函数。
损失函数
常用的损失函数有很多种,根据模型的需求来选择。在本教程中,我们使用误差平方和作为损失函数。
误差平方和是求每个预测值和真实值之间的误差再求和,这个误差是他们的差值求平方以便我们观察误差的绝对值。
训练的目标是找到一组 W 和 b,使得损失函数最好小,也即预测值和真实值之间的距离最小。
反向传播
我们已经度量出了预测的误差(损失),现在需要找到一种方法来传播误差,并以此更新权值和偏置。
为了知道如何适当的调整权值和偏置,我们需要知道损失函数对权值 W 和偏置 b 的导数。
回想微积分中的概念,函数的导数就是函数的斜率。
梯度下降法
如果我们已经求出了导数,我们就可以通过增加或减少导数值来更新权值 W 和偏置 b(参考上图)。这种方式被称为梯度下降法。
但是我们不能直接计算损失函数对权值和偏置的导数,因为在损失函数的等式中并没有显式的包含他们。因此,我们需要运用链式求导发在来帮助计算导数。
链式法则用于计算损失函数对 W 和 b 的导数。注意,为了简单起见。我们只展示了假设网络只有 1 层的偏导数。
这虽然很简陋,但是我们依然能得到想要的结果—损失函数对权值 W 的导数(斜率),因此我们可以相应的调整权值。
现在我们将反向传播算法的函数添加到 Python 代码中
为了更深入的理解微积分原理和反向传播中的链式求导法则,我强烈推荐 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合并完成一个实例
既然我们已经有了包括前向传播和反向传播的完整 Python 代码,那么就将其应用到一个例子上看看它是如何工作的吧。
神经网络可以通过学习得到函数的权重。而我们仅靠观察是不太可能得到函数的权重的。
让我们训练神经网络进行 1500 次迭代,看看会发生什么。 注意观察下面每次迭代的损失函数,我们可以清楚地看到损失函数单调递减到最小值。这与我们之前介绍的梯度下降法一致。
让我们看看经过 1500 次迭代后的神经网络的最终预测结果:
经过 1500 次迭代训练后的预测结果
我们成功了!我们应用前向和方向传播算法成功的训练了神经网络并且预测结果收敛于真实值。
注意预测值和真实值之间存在细微的误差是允许的。这样可以防止模型过拟合并且使得神经网络对于未知数据有着更强的泛化能力。
下一步是什么?
幸运的是我们的学习之旅还没有结束,仍然有很多关于神经网络和深度学习的内容需要学习。例如:
? 除了 Sigmoid 以外,还可以用哪些激活函数
? 在训练网络的时候应用学习率
? 在面对图像分类任务的时候使用卷积神经网络
我很快会写更多关于这个主题的内容,敬请期待!
最后的想法
我自己也从零开始写了很多神经网络的代码
虽然可以使用诸如 Tensorflow 和 Keras 这样的深度学习框架方便的搭建深层网络而不需要完全理解其内部工作原理。但是我觉得对于有追求的数据科学家来说,理解内部原理是非常有益的。
这种练习对我自己来说已成成为重要的时间投入,希望也能对你有所帮助
㈨ 如何搭建python环境
1、说明:windows下设置python环境变量,就是把python的安装目录添加到系统path中。2、步骤:1)确定python安装目录,根据版本不同安装目录也不同,可以在开始菜单中的快捷方式中查看。在python快捷方式上点右键,属性菜单
3、注意事项:如果未出现python结果,则需要检查路径是否设置正确,并重新启动一下计算机即可。
㈩ 代码详解:用Python构建RNN模拟人脑
(number_of_records x length_of_sequence x types_of_sequences)
(number_of_records x types_of_sequences) #where types_of_sequences is 1
%pylab inline
import math
sin_wave = np.array([math.sin(x) for x in np.arange(200)])
plt.plot(sin_wave[:50])
X = []
Y = []
seq_len = 50
num_records = len(sin_wave) - seq_len
for i in range(num_records - 50):
X.append(sin_wave[i:i+seq_len])
Y.append(sin_wave[i+seq_len])
X = np.array(X)
X = np.expand_dims(X, axis=2)
Y = np.array(Y)
Y = np.expand_dims(Y, axis=1)
X.shape, Y.shape
((100, 50, 1), (100, 1))
X_val = []
Y_val = []
for i in range(num_records - 50, num_records):
X_val.append(sin_wave[i:i+seq_len])
Y_val.append(sin_wave[i+seq_len])
X_val = np.array(X_val)
X_val = np.expand_dims(X_val, axis=2)
Y_val = np.array(Y_val)
Y_val = np.expand_dims(Y_val, axis=1)
learning_rate = 0.0001
nepoch = 25
T = 50 # length of sequence
hidden_dim = 100
output_dim = 1
bptt_truncate = 5
min_clip_value = -10
max_clip_value = 10
U = np.random.uniform(0, 1, (hidden_dim, T))
W = np.random.uniform(0, 1, (hidden_dim, hidden_dim))
V = np.random.uniform(0, 1, (output_dim, hidden_dim))
def sigmoid(x):
return 1 / (1 + np.exp(-x))
for epoch in range(nepoch):
# check loss on train
loss = 0.0
# do a forward pass to get prediction
for i in range(Y.shape[0]):
x, y = X[i], Y[i] # get input, output values of each record
prev_s = np.zeros((hidden_dim, 1)) # here, prev-s is the value of the previous activation of hidden layer; which is initialized as all zeroes
for t in range(T):
new_input = np.zeros(x.shape) # we then do a forward pass for every timestep in the sequence
new_input[t] = x[t] # for this, we define a single input for that timestep
mulu = np.dot(U, new_input)
mulw = np.dot(W, prev_s)
add = mulw + mulu
s = sigmoid(add)
mulv = np.dot(V, s)
prev_s = s
# calculate error
loss_per_record = (y - mulv)**2 / 2
loss += loss_per_record
loss = loss / float(y.shape[0])
# check loss on val
val_loss = 0.0
for i in range(Y_val.shape[0]):
x, y = X_val[i], Y_val[i]
prev_s = np.zeros((hidden_dim, 1))
for t in range(T):
new_input = np.zeros(x.shape)
new_input[t] = x[t]
mulu = np.dot(U, new_input)
mulw = np.dot(W, prev_s)
add = mulw + mulu
s = sigmoid(add)
mulv = np.dot(V, s)
prev_s = s
loss_per_record = (y - mulv)**2 / 2
val_loss += loss_per_record
val_loss = val_loss / float(y.shape[0])
print('Epoch: ', epoch + 1, ', Loss: ', loss, ', Val Loss: ', val_loss)
Epoch: 1 , Loss: [[101185.61756671]] , Val Loss: [[50591.0340148]]
...
...
# train model
for i in range(Y.shape[0]):
x, y = X[i], Y[i]
layers = []
prev_s = np.zeros((hidden_dim, 1))
dU = np.zeros(U.shape)
dV = np.zeros(V.shape)
dW = np.zeros(W.shape)
dU_t = np.zeros(U.shape)
dV_t = np.zeros(V.shape)
dW_t = np.zeros(W.shape)
dU_i = np.zeros(U.shape)
dW_i = np.zeros(W.shape)
# forward pass
for t in range(T):
new_input = np.zeros(x.shape)
new_input[t] = x[t]
mulu = np.dot(U, new_input)
mulw = np.dot(W, prev_s)
add = mulw + mulu
s = sigmoid(add)
mulv = np.dot(V, s)
layers.append({'s':s, 'prev_s':prev_s})
prev_s = s
# derivative of pred
dmulv = (mulv - y)
# backward pass
for t in range(T):
dV_t = np.dot(dmulv, np.transpose(layers[t]['s']))
dsv = np.dot(np.transpose(V), dmulv)
ds = dsv
dadd = add * (1 - add) * ds
dmulw = dadd * np.ones_like(mulw)
dprev_s = np.dot(np.transpose(W), dmulw)
for i in range(t-1, max(-1, t-bptt_truncate-1), -1):
ds = dsv + dprev_s
dadd = add * (1 - add) * ds
dmulw = dadd * np.ones_like(mulw)
dmulu = dadd * np.ones_like(mulu)
dW_i = np.dot(W, layers[t]['prev_s'])
dprev_s = np.dot(np.transpose(W), dmulw)
new_input = np.zeros(x.shape)
new_input[t] = x[t]
dU_i = np.dot(U, new_input)
dx = np.dot(np.transpose(U), dmulu)
dU_t += dU_i
dW_t += dW_i
dV += dV_t
dU += dU_t
dW += dW_t
if dU.max() > max_clip_value:
dU[dU > max_clip_value] = max_clip_value
if dV.max() > max_clip_value:
dV[dV > max_clip_value] = max_clip_value
if dW.max() > max_clip_value:
dW[dW > max_clip_value] = max_clip_value
if dU.min() < min_clip_value:
dU[dU < min_clip_value] = min_clip_value
if dV.min() < min_clip_value:
dV[dV < min_clip_value] = min_clip_value
if dW.min() < min_clip_value:
dW[dW < min_clip_value] = min_clip_value
# update
U -= learning_rate * dU
V -= learning_rate * dV
W -= learning_rate * dW
Epoch: 1 , Loss: [[101185.61756671]] , Val Loss: [[50591.0340148]]
Epoch: 2 , Loss: [[61205.46869629]] , Val Loss: [[30601.34535365]]
Epoch: 3 , Loss: [[31225.3198258]] , Val Loss: [[15611.65669247]]
Epoch: 4 , Loss: [[11245.17049551]] , Val Loss: [[5621.96780111]]
Epoch: 5 , Loss: [[1264.5157739]] , Val Loss: [[632.02563908]]
Epoch: 6 , Loss: [[20.15654115]] , Val Loss: [[10.05477285]]
Epoch: 7 , Loss: [[17.13622839]] , Val Loss: [[8.55190426]]
Epoch: 8 , Loss: [[17.38870495]] , Val Loss: [[8.68196484]]
Epoch: 9 , Loss: [[17.181681]] , Val Loss: [[8.57837827]]
Epoch: 10 , Loss: [[17.31275313]] , Val Loss: [[8.64199652]]
Epoch: 11 , Loss: [[17.12960034]] , Val Loss: [[8.54768294]]
Epoch: 12 , Loss: [[17.09020065]] , Val Loss: [[8.52993502]]
Epoch: 13 , Loss: [[17.17370113]] , Val Loss: [[8.57517454]]
Epoch: 14 , Loss: [[17.04906914]] , Val Loss: [[8.50658127]]
Epoch: 15 , Loss: [[16.96420184]] , Val Loss: [[8.46794248]]
Epoch: 16 , Loss: [[17.017519]] , Val Loss: [[8.49241316]]
Epoch: 17 , Loss: [[16.94199493]] , Val Loss: [[8.45748739]]
Epoch: 18 , Loss: [[16.99796892]] , Val Loss: [[8.48242177]]
Epoch: 19 , Loss: [[17.24817035]] , Val Loss: [[8.6126231]]
Epoch: 20 , Loss: [[17.00844599]] , Val Loss: [[8.48682234]]
Epoch: 21 , Loss: [[17.03943262]] , Val Loss: [[8.50437328]]
Epoch: 22 , Loss: [[17.01417255]] , Val Loss: [[8.49409597]]
Epoch: 23 , Loss: [[17.20918888]] , Val Loss: [[8.5854792]]
Epoch: 24 , Loss: [[16.92068017]] , Val Loss: [[8.44794633]]
Epoch: 25 , Loss: [[16.76856238]] , Val Loss: [[8.37295808]]
preds = []
for i in range(Y.shape[0]):
x, y = X[i], Y[i]
prev_s = np.zeros((hidden_dim, 1))
# Forward pass
for t in range(T):
mulu = np.dot(U, x)
mulw = np.dot(W, prev_s)
add = mulw + mulu
s = sigmoid(add)
mulv = np.dot(V, s)
prev_s = s
preds.append(mulv)
preds = np.array(preds)
plt.plot(preds[:, 0, 0], 'g')
plt.plot(Y[:, 0], 'r')
plt.show()
preds = []
for i in range(Y_val.shape[0]):
x, y = X_val[i], Y_val[i]
prev_s = np.zeros((hidden_dim, 1))
# For each time step...
for t in range(T):
mulu = np.dot(U, x)
mulw = np.dot(W, prev_s)
add = mulw + mulu
s = sigmoid(add)
mulv = np.dot(V, s)
prev_s = s
preds.append(mulv)
preds = np.array(preds)
plt.plot(preds[:, 0, 0], 'g')
plt.plot(Y_val[:, 0], 'r')
plt.show()
from sklearn.metrics import mean_squared_error
math.sqrt(mean_squared_error(Y_val[:, 0] * max_val, preds[:, 0, 0] * max_val))
0.127191931509431