首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Keras LSTM -验证损失从第一个纪元开始增加

Keras LSTM -验证损失从第一个纪元开始增加
EN

Stack Overflow用户
提问于 2018-01-31 12:40:37
回答 2查看 7.3K关注 0票数 4

我目前正在进行我的第一个“真正的”DL项目,即(惊喜)预测股票走势。我知道我以1000:1的比例做出任何有用的事情,但我很享受它,并希望看到它完成,我在几个星期的尝试中学到了比前6个月完成MOOC的更多的东西。

我正在使用Keras构建一个LSTM来预测下一步,并尝试将该任务作为分类(向上/向下/稳定)和现在作为回归问题。这两者都导致了类似的障碍,因为我的验证损失从第一个时代开始就没有改善过。

我可以让模型过拟合,使得MSE的训练损失接近于零(如果分类,则准确率为100% ),但在任何阶段,验证损失都不会减少。对于我未经训练的眼睛来说,这是过度拟合,所以我添加了不同程度的辍学,但所有这些都扼杀了模型/训练精度的学习,并且在验证精度方面没有显示出任何改进。

我已经尝试改变了大量的超参数-学习率,优化器,批处理大小,回看窗口,#层,#单位,dropout,#samples等,也尝试了数据的子集和特征的子集,但我就是不能让它工作,所以我非常感谢任何帮助。

下面的代码(我知道它不是很漂亮):

代码语言:javascript
运行
AI代码解释
复制
# Import saved full dataframe ~ 200 features
import feather
df = feather.read_dataframe('df_feathered')
df.set_index('time', inplace=True)

# Difference the dataset to make stationary
df = df.diff(periods=1, axis=0)

# MAKE LARGE SAMPLE FOR TESTING
df_train = df.loc['2017-3-1':'2017-6-30']
df_val = df.loc['2017-7-1':'2017-8-31']
df_test = df.loc['2017-9-1':'2017-9-30']

# Make x_train, x_val sets by dropping target variable
x_train = df_train.drop('close+1', axis=1)
x_val = df_val.drop('close+1', axis=1)

# Scale the training data first then fit the transform to the test set
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_val)

# scaler = MinMaxScaler(feature_range=(0,1))
# x_train = scaler.fit_transform(df_train1)
# x_test = scaler.transform(df_val1)

# Create y_train, y_test, simply target variable for regression
y_train = df_train['close+1']
y_test = df_val['close+1']

# Define Lookback window for LSTM input
sliding_window = 15

# Convert x_train, x_test, y_train, y_test into 3d array (samples, 
timesteps, features) for LSTM input
dataXtrain = []
for i in range(len(x_train)-sliding_window-1):
        a = x_train[i:(i+sliding_window), 0:(x_train.shape[1])]
        dataXtrain.append(a)

dataXtest = []
for i in range(len(x_test)-sliding_window-1):
        a = x_test[i:(i+sliding_window), 0:(x_test.shape[1])]
        dataXtest.append(a)

dataYtrain = []
for i in range(len(y_train)-sliding_window-1):
        dataYtrain.append(y_train[i + sliding_window])

dataYtest = []
for i in range(len(y_test)-sliding_window-1):
        dataYtest.append(y_test[i + sliding_window])

# Make data the divisible by a variety of batch_sizes for training
# Started at 1000 to not include replaced NaN values
dataXtrain = np.array(dataXtrain[1000:172008])
dataYtrain = np.array(dataYtrain[1000:172008])
dataXtest = np.array(dataXtest[1000:83944])
dataYtest = np.array(dataYtest[1000:83944])

# Checking input shapes
print('dataXtrain size is: {}'.format((dataXtrain).shape))
print('dataXtest size is: {}'.format((dataXtest).shape))
print('dataYtrain size is: {}'.format((dataYtrain).shape))
print('dataYtest size is: {}'.format((dataYtest).shape))

### ACTUAL LSTM MODEL

batch_size = 256
timesteps = dataXtrain.shape[1]
features = dataXtrain.shape[2]

# Model set-up, stacked 4 layer stateful LSTM
model = Sequential()
model.add(LSTM(512, return_sequences=True, stateful=True, 
               batch_input_shape=(batch_size, timesteps, features)))
model.add(LSTM(256,stateful=True, return_sequences=True))
model.add(LSTM(256,stateful=True, return_sequences=True))
model.add(LSTM(128,stateful=True))
model.add(Dense(1, activation='linear'))         

model.summary()

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.9, patience=5, min_lr=0.000001, verbose=1)

def coeff_determination(y_true, y_pred):
    from keras import backend as K
    SS_res =  K.sum(K.square( y_true-y_pred ))
    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) )
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )

model.compile(loss='mse',
              optimizer='nadam',
              metrics=[coeff_determination,'mse','mae','mape'])

history = model.fit(dataXtrain, dataYtrain,validation_data=(dataXtest, dataYtest),
          epochs=100,batch_size=batch_size, shuffle=False, verbose=1, callbacks=[reduce_lr])

score = model.evaluate(dataXtest, dataYtest,batch_size=batch_size, verbose=1)
print(score)

predictions = model.predict(dataXtest, batch_size=batch_size)
print(predictions)

import matplotlib.pyplot as plt
%matplotlib inline
#plt.plot(history.history['mean_squared_error'])
#plt.plot(history.history['val_mean_squared_error'])
plt.plot(history.history['coeff_determination'])
plt.plot(history.history['val_coeff_determination'])
#plt.plot(history.history['mean_absolute_error'])
#plt.plot(history.history['mean_absolute_percentage_error'])
#plt.plot(history.history['val_mean_absolute_percentage_error'])
#plt.title("MSE")
plt.ylabel("R2")
plt.xlabel("epoch")
plt.legend(["train", "val"], loc="best")
plt.show()

plt.plot(history.history["loss"][5:])
plt.plot(history.history["val_loss"][5:])
plt.title("model loss")
plt.ylabel("loss")
plt.xlabel("epoch")
plt.legend(["train", "val"], loc="best")
plt.show()

plt.figure(figsize=(20,8))
plt.plot(dataYtest)
plt.plot(predictions)
plt.title("Prediction")
plt.ylabel("Price")
plt.xlabel("Time")
plt.legend(["Truth", "Prediction"], loc="best")
plt.show()
EN

回答 2

Stack Overflow用户

发布于 2018-12-19 10:45:53

也许你应该记住,你是在预测袜子的回报,这很可能预测不到任何东西。因此,增加val_loss一点都不是过度拟合。与其添加更多的辍学,也许你应该考虑添加更多的层来增加它的功能。

票数 2
EN

Stack Overflow用户

发布于 2018-02-04 08:34:17

尽量降低学习率(暂时不要辍学)。

你为什么要使用

代码语言:javascript
运行
AI代码解释
复制
shuffle=False

在fit()函数中?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48542473

复制
相关文章
android系统如何自适应屏幕大小
1、屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别(small,normal,large,and extra large)。 1.3屏幕密度 每英寸像素数 手机可以有相同的分辨率,但屏幕尺寸可以不相同, Diagonal pixel表示对角线的像素值(=),DPI=933/3.7=252 android将实际的屏幕密度分为四个通用尺寸(low,medium,high,and extra high) 一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi 对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚 1.4密度无关的像素(Density-independent pixel——dip) dip是一种虚拟的像素单位 dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160) 当你定义应用的布局的UI时应该使用dp单位,确保UI在不同的屏幕上正确显示。 手机屏幕分类和像素密度的对应关系如表1所示 手机尺寸分布情况(http://developer.android.com/resources/dashboard/screens.html)如图所示, 目前主要是以分辨率为800*480和854*480的手机用户居多 从以上的屏幕尺寸分布情况上看,其实手机只要考虑3-4.5寸之间密度为1和1.5的手机 2、android多屏幕支持机制 Android的支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。 Android平台中支持一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合适资源。 指定大小(size-specific)的合适资源是指small, normal, large, and xlarge。 指定密度(density-specific)的合适资源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high). Android有个自动匹配机制去选择对应的布局和图片资源 1)界面布局方面    根据物理尺寸的大小准备5套布局:     layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),     layout-small(屏幕尺寸小于3英寸左右的布局),       layout-normal(屏幕尺寸小于4.5英寸左右),     layout-large(4英寸-7英寸之间),     layout-xlarge(7-10英寸之间) 2)图片资源方面   需要根据dpi值准备5套图片资源:     drawable:主要放置xml配置文件或者对分辨率要求较低的图片     drawalbe-ldpi:低分辨率的图片,如QVGA (240x320)     drawable-mdpi:中等分辨率的图片,如HVGA (320x480)     drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854)     drawable-xhdpi:至少960dp x 720dp Android有个自动匹配机制去选择对应的布局和图片资源。   系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。   在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。 3、AndroidManifest.xml 配置 android从1.6和更高,Google为了方便开发者对于各种分辨率机型的移植而增加了自动适配的功能           <supports-screens            android:largeScreens="true"               android:normalScreens="true"              android:smallScreens="true"               android:anyDensity="true"/> 3.1是否支持多种不同密度的屏幕 android:anyDensity=["true" | "false"]  如果android:anyDensity
用户2192970
2019/02/21
5.3K1
css页面自适应屏幕大小_html图片自适应屏幕
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170364.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
8.1K0
css页面自适应屏幕大小_html图片自适应屏幕
Word VBA技术:快速调整表格大小以适应页面宽度
有时候,文档中的表格有大有小且并不一定与页面同宽,或者页面宽度调整之后,表格仍保持原样。如果我们想将表格的大小调整为与页面宽度相同,并且保持各列单元格中原有的相对列宽,那么可以使用VBA来解决。
fanjy
2023/02/24
2K0
图片自适应父元素大小,并左右上下居中的css方法
图片自适应父元素大小,并左右上下居中的css方法 前言 这种效果多见于矩形盒子里面调用不规则的图片,希望能够达到的效果。这个效果可以很简单的用css来实现,虽然已经烂熟于心,但是并未记录下来。今天看到
FungLeo
2018/01/08
3.2K0
图片自适应父元素大小,并左右上下居中的css方法
css适配屏幕尺寸大小自适应
改新模板的时候考虑到单独适配手机端排版美化。只需要在css内写好窗口大小相对应的样式。访问就根据窗口大小自动使用相应的样式。
AlexTao
2020/02/13
6.2K0
[1057]VMware安装的虚拟机窗口如何自适应屏幕大小
vmware是一款非常好用的虚拟机,大部分用户都会用vmware安装各种操作系统,安装后可能会出现一个问题,就是主机屏幕太小,无法完整显示VMware虚拟机界面,这时候就可以设置让VMware自动适应主机窗口,一起来了解下。
周小董
2021/10/28
16.3K0
[1057]VMware安装的虚拟机窗口如何自适应屏幕大小
flex vue 垂直居中居上_flex 垂直居中、两列对齐、自适应宽[通俗易懂]
hahjdjjajdES6提供的Proxy可以让JS开发者很方便的使用代理模式,听说Vue
全栈程序员站长
2022/08/23
1.1K0
CSDN Markdown编辑器改变图片对齐方式(居中,左对齐,右对齐)及改变图片大小
我也是由于想博客更美观要使图片居中,查阅百度后,结合自己走的弯路,在此给大家提供借鉴。 使用CSDN中Markdown编辑器的帮助文档的方法插入图片Ctrl/Command + Shift + G,上传图片不要使用搜狗输入法,按键功能有冲突,上传完后如图
小火柴棒
2019/01/11
4.1K0
【前端】CSS : 对齐、居中
文本、元素的对齐和居中在开发中经常会用到。本文分别对文本、元素的对齐、居中进行介绍
Gavin-ZYX
2019/03/04
3.3K0
【前端】CSS : 对齐、居中
tkinter: 屏幕居中
目的 实现 tkinter 窗口 居于 屏幕 正中央 。 效果图 实现代码 根据 python tkinter 窗口居中对齐 修改得到: # coding=utf-8 import tkinter a
JNingWei
2018/09/28
9290
tkinter: 屏幕居中
居中对齐的几种方法
这是因为,根据规范,父元素的子元素的上边距( margin-top),如果碰不到有效的 border或者 padding,就会一层一层的找自己的祖先元素,直到找到祖先元素有有效的 border或border为止
赤蓝紫
2023/01/18
8660
人工智能系统可以调整图像的对比度、大小和形状
人工智能(AI)和艺术并没有你想象的那么对立。事实上,智能系统已经在与艺术家合作,帮助艺术家创作歌曲,制作油画作品,以及制作彩色标识。现在,一名软件开发人员利用人工智能的生成能力来操纵图像中的对比度、颜色和其他属性。
AiTechYun
2018/12/29
1.8K0
人工智能系统可以调整图像的对比度、大小和形状
Visio如何调整锁定图像大小
在Visio中,比如模板中的UML类图,是不可调整大小的,这可能给我们设计图片带来了一些不便之处,如下图: 可以看到其边框是显示锁定状态无法修改的,当我们在左下角修改器长宽时,也会出现不可修改的情况。
码农阿宇
2018/04/18
4.6K0
Visio如何调整锁定图像大小
html背景图片自适应屏幕大小_jsp背景图片自适应
background-size:cover 会把图片拉伸至足够大,但是背景图片有些部分可能显示不全
全栈程序员站长
2022/11/08
4.3K0
html背景图片自适应屏幕大小_jsp背景图片自适应
Ubuntu 16.04虚拟机调整窗口大小自适应Windows 7
Windows 7上Ubuntu 16.04虚拟机安装成功后,默认的虚拟机窗口比较小,需要适当调整,才能把虚拟机的屏幕放大, 适合使用,以下介绍调整方法。
用户8704835
2021/06/07
1.9K0
人脸对齐:ASM (主动形状模型)算法
本文介绍了人脸对齐领域的一种算法——主动形状模型(ASM),它是一种基于点分布模型(PDM)的算法,通过全局和局部的形状约束条件,利用最小二乘法拟合出人脸形状,同时介绍了ASM的流程和具体实现细节。
郑克松
2017/08/24
6.1K0
人脸对齐:ASM (主动形状模型)算法
html图片自适应div大小_未知宽高的div元素垂直水平居中
2.设置html图片的高度 计算出来的 height 正好是排版后的高度大小,是 CGFloat 类型,在是在我们设置UIlabel/Cell 高度时,可能存在四舍五入等,最后存在的一点点误差使得 UILabel 显示不全,可能出现缺少一行,上下空白太多等情况;
全栈程序员站长
2022/11/09
2.9K0
bootstrap table表格内容居中对齐
官方网站: http://bootstrap-table.wenzhixin.net.cn/ 参考文档:http://issues.wenzhixin.net.cn/bootstrap-table/index.html 中文文档:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 下载bootstrap Table插件所必须的js,地址:https://github.com/wenzhixin/bootstrap-table
王小婷
2019/07/24
4.6K0
居中对齐两个难点的实现
注:vertical-align 作用单元格时,才生效,所以一般会结合dispaly: table-cell ; 一起使用才有效果
用户9914333
2022/07/22
5990
css 文字自适应大小_div自适应窗口大小
css3提供了一些与当前viewpoint相关的元素,vw,vh,vmin, vmax等。
全栈程序员站长
2022/09/20
3.3K0

相似问题

Jquery数值调节按钮

20

excel的数值调节按钮

10

更新按钮未更新

23

jQuery按钮集未反映更新

30

数字输入-始终显示数值调节按钮

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档