基于Keras的LSTM多变量时间序列预测
传统的线性模型难以解决多变量或多输入问题,而神经网络如LSTM则擅长于处理多个变量的问题,该特性使其有助于解决时间序列预测问题。
在接下来的这篇博客中,你将学会如何利用深度学习库Keras搭建LSTM模型来处理多个变量的时间序列预测问题。
经过这个博客你会掌握:
1. 如何将原始数据转化为适合处理时序预测问题的数据格式;
2. 如何准备数据并搭建LSTM来处理时序预测问题;
3. 如何利用模型预测。
目录
1.空气污染预测
在这篇博客中,我们将采用空气质量数据集。数据来源自位于北京的美国大使馆在2010年至2014年共5年间每小时采集的天气及空气污染指数。
数据集包括日期、PM2.5浓度、露点、温度、风向、风速、累积小时雪量和累积小时雨量。原始数据中完整的特征如下:
1.No 行数
2.year 年
3.month 月
4.day 日
5.hour 小时
6.pm2.5 PM2.5浓度
7.DEWP 露点
8.TEMP 温度
9.PRES 大气压
10.cbwd 风向
11.lws 风速
12.ls 累积雪量
13.lr 累积雨量
我们可以利用此数据集搭建预测模型,利用前一个或几个小时的天气条件和污染数据预测下一个(当前)时刻的污染程度。
可以在UCI Machine Learning Repository下载数据集。
Beijing PM2.5 Data Set
2.数据处理
在使用数据之前需要对数据做一些处理,待处理部分数据如下:
No,year,month,day,hour,pm2.5,DEWP,TEMP,PRES,cbwd,Iws,Is,Ir
1,2010,1,1,0,NA,-21,-11,1021,NW,1.79,0,0
2,2010,1,1,1,NA,-21,-12,1020,NW,4.92,0,0
3,2010,1,1,2,NA,-21,-11,1019,NW,6.71,0,0
4,2010,1,1,3,NA,-21,-14,1019,NW,9.84,0,0
5,2010,1,1,4,NA,-20,-12,1018,NW,12.97,0,0
粗略的观察数据集会发现最开始的24小时PM2.5值都是NA,因此需要删除这部分数据,对于其他时刻少量的缺省值利用Pandas中的fillna填充;同时需要整合日期数据,使其作为Pandas中索引(index)。
下面的代码完成了以上的处理过程,同时去掉了原始数据中“No”列,并将列命名为更清晰的名字。
from pandas import read_csv
from datetime import datetime
# load data
def parse(x):
return datetime.strptime(x, '%Y %m %d %H')
dataset = read_csv('raw.csv', parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)
dataset.drop('No', axis=1, inplace=True)
# manually specify column names
dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']
dataset.index.name = 'date'
# mark all NA values with 0
dataset['pollution'].fillna(0, inplace=True)
# drop the first 24 hours
dataset = dataset[24:]
# summarize first 5 rows
print(dataset.head(5))
# save to file
dataset.to_csv('pollution.csv')
处理后的数据存储在“pollution.csv”文件中,部分如下:
pollution dew temp press wnd_dir wnd_spd snow rain
date
2010-01-02 00:00:00 129.0 -16 -4.0 1020.0 SE 1.79 0 0
2010-01-02 01:00:00 148.0 -15 -4.0 1020.0 SE 2.68 0 0
2010-01-02 02:00:00 159.0 -11 -5.0 1021.0 SE 3.57 0 0
2010-01-02 03:00:00 181.0 -7 -5.0 1022.0 SE 5.36 1 0
2010-01-02 04:00:00 138.0 -7 -5.0 1022.0 SE 6.25 2 0
现在的数据格式已经更加适合处理,可以简单的对每列进行绘图。下面的代码加载了“pollution.csv”文件,并对除了类别型特性“风速”的每一列数据分别绘图。
from pandas import read_csv
from matplotlib import pyplot
# load dataset
dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
# specify columns to plot
groups = [0, 1, 2, 3, 5, 6, 7]
i = 1
# plot each column
pyplot.figure()
for group in groups:
pyplot.subplot(len(groups), 1, i)
pyplot.plot(values[:, group])
pyplot.title(dataset.columns[group], y=0.5, loc='right')
i += 1
pyplot.show()
运行上述代码,并对7个变量在5年的范围内绘图。
3.多变量LSTM预测模型
3.1 LSTM数据准备
采用LSTM模型时,第一步需要对数据进行适配处理,其中包括将数据集转化为有监督学习问题和归一化变量(包括输入和输出值),使其能够实现通过前一个时刻(t-1)的污染数据和天气条件预测当前时刻(t)的污染。
以上的处理方式很直接也比较简单,仅仅只是为了抛砖引玉,其他的处理方式也可以探索,比如:
1. 利用过去24小时的污染数据和天气条件预测当前时刻的污染;
2. 预测下一个时刻(t+1)可能的天气条件;
利用上一篇博客中的series_to_supervised()函数将数据集转化为有监督学习问题:How to Convert a Time Series to a Supervised Learning Problem in Python
下面代码中首先加载“pollution.csv”文件,并利用sklearn的预处理模块对类别特征“风向”进行编码,当然也可以对该特征进行one-hot编码。
接着对所有的特征进行归一化处理,然后将数据集转化为有监督学习问题,同时将需要预测的当前时刻(t)的天气条件特征移除,完整代码如下:
# convert series to supervised learning
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
n_vars = 1 if type(data) is list else data.shape[1]
df = DataFrame(data)
cols, names = list(), list()
# input sequence (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
# forecast sequence (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
if i == 0:
names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
else:
names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
# put it all together
agg = concat(cols, axis=1)
agg.columns = names
# drop rows with NaN values
if dropnan:
agg.dropna(inplace=True)
return agg
# load dataset
dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
# integer encode direction
encoder = LabelEncoder()
values[:,4] = encoder.fit_transform(values[:,4])
# ensure all data is float
values = values.astype('float32')
# normalize features
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# frame as supervised learning
reframed = series_to_supervised(scaled, 1, 1)
# drop columns we don't want to predict
reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True)
print(reframed.head())
#p#分页标题#e#
运行上述代码,能看到被转化后的数据集,数据集包括8个输入变量(输入特征)和1个输出变量(当前时刻t的空气污染值,标签)
为了使变量名更直观,笔者修改了series_to_supervised()源码。
pollution(t-1) dew(t-1) temp(t-1) press(t-1) wnd_dir(t-1) wnd_spd(t-1) \
1 0.129779 0.352941 0.245902 0.527273 0.666667 0.002290
2 0.148893 0.367647 0.245902 0.527273 0.666667 0.003811
3 0.159960 0.426471 0.229508 0.545454 0.666667 0.005332
4 0.182093 0.485294 0.229508 0.563637 0.666667 0.008391
5 0.138833 0.485294 0.229508 0.563637 0.666667 0.009912
snow(t-1) rain(t-1) pollution(t)
1 0.000000 0.0 0.148893
2 0.000000 0.0 0.159960
3 0.000000 0.0 0.182093
4 0.037037 0.0 0.138833
5 0.074074 0.0 0.109658
数据集的处理比较简单,还有很多的方式可以尝试,一些可以尝试的方向包括:
1. 对“风向”特征哑编码;
2. 加入季节特征;
3. 时间步长超过1。
其中,上述第三种方式对于处理时间序列问题的LSTM可能是最重要的。
3.2 构造模型
在这一节,我们将构造LSTM模型。
首先,我们需要将处理后的数据集划分为训练集和测试集。为了加速模型的训练,我们仅利用第一年数据进行训练,然后利用剩下的4年进行评估。
下面的代码将数据集进行划分,然后将训练集和测试集划分为输入和输出变量,最终将输入(X)改造为LSTM的输入格式,即[samples,timesteps,features]。
# split into train and test sets
values = reframed.values
n_train_hours = 365 * 24
train = values[:n_train_hours, :]
test = values[n_train_hours:, :]
# split into input and outputs
train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
运行上述代码打印训练集和测试集的输入输出格式,其中9K小时数据作训练集,35K小时数据作测试集。
(8760, 1, 8) (8760,) (35039, 1, 8) (35039,)
现在可以搭建LSTM模型了。
LSTM模型中,隐藏层有50个神经元,输出层1个神经元(回归问题),输入变量是一个时间步(t-1)的特征,损失函数采用Mean Absolute Error(MAE),优化算法采用Adam,模型采用50个epochs并且每个batch的大小为72。
最后,在fit()函数中设置validation_data参数,记录训练集和测试集的损失,并在完成训练和测试后绘制损失图。
# design network
model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network
history = model.fit(train_X, train_y, epochs=50, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)
# plot history
pyplot.plot(history.history['loss'], label='train')
pyplot.plot(history.history['val_loss'], label='test')
pyplot.legend()
pyplot.show()
# design network
model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network
history = model.fit(train_X, train_y, epochs=50, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)
# plot history
pyplot.plot(history.history['loss'], label='train')
pyplot.plot(history.history['val_loss'], label='test')
pyplot.legend()
pyplot.show()
3.3 模型评估
#p#分页标题#e#
接下里我们对模型效果进行评估。
值得注意的是:需要将预测结果和部分测试集数据组合然后进行比例反转(invert the scaling),同时也需要将测试集上的预期值也进行比例转换。
(We combine the forecast with the test dataset and invert the scaling. We also invert scaling on the test dataset with the expected pollution numbers.)
至于在这里为什么进行比例反转,是因为我们将原始数据进行了预处理(连同输出值y),此时的误差损失计算是在处理之后的数据上进行的,为了计算在原始比例上的误差需要将数据进行转化。同时笔者有个小Tips:就是反转时的矩阵大小一定要和原来的大小(shape)完全相同,否则就会报错。
通过以上处理之后,再结合RMSE(均方根误差)计算损失。
# make a prediction
yhat = model.predict(test_X)
test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))
# invert scaling for forecast
inv_yhat = concatenate((yhat, test_X[:, 1:]), axis=1)
inv_yhat = scaler.inverse_transform(inv_yhat)
inv_yhat = inv_yhat[:,0]
# invert scaling for actual
test_y = test_y.reshape((len(test_y), 1))
inv_y = concatenate((test_y, test_X[:, 1:]), axis=1)
inv_y = scaler.inverse_transform(inv_y)
inv_y = inv_y[:,0]
# calculate RMSE
rmse = sqrt(mean_squared_error(inv_y, inv_yhat))
print('Test RMSE: %.3f' % rmse)
整个小项目完整代码如下,注意:下例代码假设你已经正确地完成了数据预处理过程,如将下载的“raw.csv” 数据处理成 “pollution.csv“文件中的数据。
from math import sqrt
from numpy import concatenate
from matplotlib import pyplot
from pandas import read_csv
from pandas import DataFrame
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
# convert series to supervised learning
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
n_vars = 1 if type(data) is list else data.shape[1]
df = DataFrame(data)
cols, names = list(), list()
# input sequence (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
# forecast sequence (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
if i == 0:
names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
else:
names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
# put it all together
agg = concat(cols, axis=1)
agg.columns = names
# drop rows with NaN values
if dropnan:
agg.dropna(inplace=True)
return agg
# load dataset
dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
# integer encode direction
encoder = LabelEncoder()
values[:,4] = encoder.fit_transform(values[:,4])
# ensure all data is float
values = values.astype('float32')
# normalize features
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# frame as supervised learning
reframed = series_to_supervised(scaled, 1, 1)
# drop columns we don't want to predict
reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True)
print(reframed.head())
# split into train and test sets
values = reframed.values
n_train_hours = 365 * 24
train = values[:n_train_hours, :]
test = values[n_train_hours:, :]
# split into input and outputs
train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
# design network
model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network
history = model.fit(train_X, train_y, epochs=50, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)
# plot history
pyplot.plot(history.history['loss'], label='train')
pyplot.plot(history.history['val_loss'], label='test')
pyplot.legend()
pyplot.show()
# make a prediction
yhat = model.predict(test_X)
test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))
# invert scaling for forecast
inv_yhat = concatenate((yhat, test_X[:, 1:]), axis=1)
inv_yhat = scaler.inverse_transform(inv_yhat)
inv_yhat = inv_yhat[:,0]
# invert scaling for actual
test_y = test_y.reshape((len(test_y), 1))
inv_y = concatenate((test_y, test_X[:, 1:]), axis=1)
inv_y = scaler.inverse_transform(inv_y)
inv_y = inv_y[:,0]
# calculate RMSE
rmse = sqrt(mean_squared_error(inv_y, inv_yhat))
print('Test RMSE: %.3f' % rmse)
#p#分页标题#e#
运行以上代码,首先将会绘制训练过程中的训练和测试损失图。
训练中的每个epoch都会记录和绘制训练集和测试集的损失,并在整个训练结束后绘制模型最终的RMSE。
下图中可以看到,整个模型的RMSE达到26.496。
...
Epoch 46/50
0s - loss: 0.0143 - val_loss: 0.0133
Epoch 47/50
0s - loss: 0.0143 - val_loss: 0.0133
Epoch 48/50
0s - loss: 0.0144 - val_loss: 0.0133
Epoch 49/50
0s - loss: 0.0143 - val_loss: 0.0133
Epoch 50/50
0s - loss: 0.0144 - val_loss: 0.0133
Test RMSE: 26.496
4.进一步阅读
如果你想继续深入研究,本节提供更多的阅读资源:
1. Beijing PM2.5 Data Set on the UCI Machine Learning Repository
2. The 5 Step Life-Cycle for Long Short-Term Memory Models in Keras
3. Time Series Forecasting with the Long Short-Term Memory Network in Python
4. Multi-step Time Series Forecasting with Long Short-Term Memory Networks in Python
由于博客中代码展示不太方便,本人已将代码上传至Github中,欢迎指正交流。
Vico_Men
关注 关注
-
90
点赞 -
踩 107
评论488
收藏
一键三连
专栏目录
lstm多变量预测问题
04-16
利用LSTM做预测例子实现易懂,以了解,比较容易入门,。
【keras】利用LSTM进行单变量时间序列预测和多变量时间序列预测
XYZ
02-16 1万+
对于较为简单的时间序列预测问题,可以使用Exponential Smoothing和ARIMA等传统模型非常方便地求解。然而,对于复杂的时间序列预测问题,LSTM不失为一种很好的选择。因此,本文旨在探讨如何利用LSTM神经网络求解时间序列预测问题。首先,需要明白时间序列预测问题是如何转换为传统的监督学习问题的,即时间窗方法。有关时间序列预测问题转换为监督学习的过程请移步:Time ...
LSTM多变量预测
09-24
LSTM多变量预测,本程序利用TensorFlow构建一个简易LSTM模型,内含对多个变量因子,以及本程序的运行环境。
基于LSTM的多变量多步预测模型
热门推荐
Python中文社区
08-08 1万+
♚作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习、深度学习、NLP、CVBlog:http://yishuihancheng.blog.csdn.net本文主...
在Keras中使用LSTM模型进行多变量时间序列预测
weixin_42608414的博客
08-25 8291
今天我给大家介绍一个国外深度学习大牛Jason Brownlee写的一篇关于多变量时间序列预测的博客,我在原文的代码基础上做了一点点修改,只是为了便于大家更好的理解。在本文中,您将了解如何在Keras深度学习库中为多变量时间序列预测开发LSTM模型。读完成本文后,您将了解: 如何将原始数据集转换为可用于时间序列预测的数据。 如何准备数据并使LSTM适合多变量时间序列预测问题。 如何进行预测并...
Tensorflow学习实战之多变量预测
爆炒小肥牛
02-17 658
Tensorflow学习实战之多变量预测 载入数据 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.utils import shuffle #读取 df_data=pd.read_csv("5.csv") #显示摘要 print(...
LSTM多变量时间序列预测
最新发布
帅帅de三叔
03-27 3028
基于LSTM多变量的时间序列预测
lstm进行多变量预测
It is me 的博客
06-10 1520
「公开课」LSTM长短期记忆神经网络的学习与实现 什么是LSTM? 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。 用LSTM提取时序特征的优越性 VS传统的特征提取:HOG, LBP ...
lstm多变量输入回归预测模型_教你搭建多变量时间序列预测模型LSTM(附代码、数据集)...
weixin_28702105的博客
01-27 3115
来源:机器之心本文长度为2527字,建议阅读5分钟本文为你介绍如何在Keras深度学习库中搭建用于多变量时间序列预测的LSTM模型。长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。诸如长短期记忆(LSTM)循环神经网络的神经神经网络几乎可以无缝建模具备多个输入变量的问...
【吐槽】多变量时间序列预测
颹蕭蕭
03-20 1912
多变量时间序列预测的有意义吗? 两个走势相近的时间序列互相有参考价值吗? 我能用 y1=x2y_1=x^2y1=x2 的数据来预测 y2=x3/2y_2=x^{3/2}y2=x3/2 吗? 多时间序列预测是相互干扰吧?除非真能找到变量之间的关系:y2=y13/4y_2 = y_1^{3/4}y2=y13/4. 这种非线性关系要怎么用机器学习从数据中获取呢?除非我人为假设 logy2=a...
Python时间序列LSTM预测系列教程(9)-多变量
iyangdi的博客
09-07 1万+
多变量LSTM预测模型(3) 前置教程: Python时间序列LSTM预测系列教程(7)-多变量 Python时间序列LSTM预测系列教程(8)-多变量 定义&训练模型 1、数据划分成训练和测试数据 本教程用第一年数据做训练,剩余4年数据做评估 2、输入=1时间步长,8个feature 3、第一层隐藏层节点=50,输出节点=1 4、用平均绝对误差M
【DW组队学习】Pandas
0_×的博客
12-15 25
学习目标: Pandas库的使用 学习内容: 01.预备知识 02.Pandas基础 03.索引 04.分组 05.变形 06.连接 07.缺失数据 08.文本数据 09.分类数据 10.时序数据 11.综合练习 学习时间: 2020年12月12日—2021年1月9日 学习产出: 博客记录 ...
LSTM实践多变量时间序列预测
weixin_37665577的博客
01-23 5264
本文是 第一部分数据处理: 数据下载:开源能源系统数据 from pandas import read_csv from datetime import datetime from matplotlib import pyplot # load data dataset = read_csv('raw1.csv', parse_dates = [0], index_col=0) dat...
线性回归的简单python实现
Q_M_X_D_D_的博客
10-21 320
单变量简单线性回归 以波士顿房价问题为例,数据集中共有三个输入变量,一个输出变量,在此我们只是用其中一个输入变量来进行拟合。 1、首先读取数据文件,python中的pandas库可以处理多种格式的数据文件,以csv文件为例,将数据集数据读入内存中: # 读取数据文件 data=pd.read_csv("housing.csv") examdf=DataFrame(data) 2、将整个数据集划分为训练集和测试集,在这里用到了sklearn库中的tra...
使用CNN和Python实施的肺炎检测!这个项目你给几分?
爬遍所有网站
10-12 930
介绍 嘿!几个小时前我刚刚完成一个深度学习项目,现在我想分享一下我所做的事情。这一挑战的目标是确定一个人是否患有肺炎。如果是,则确定是否由细菌或病毒引起。好吧,我觉得这个项目应该叫做分类而不是检测。 换句话说,此任务将是一个多分类问题,其中标签名称为:normal(正常),virus(病毒)和bacteria(细菌)。为了解决这个问题,我将使用CNN(卷积神经网络),它具有出色的图像分类能力,。不仅如此,在这里我还实现了图像增强技术,以提高模型性能。顺便说一句,我获得了80%的测试数据准确性,这对我
Multivariate Time Series Forecasting with LSTMs in Keras 中文版翻译
ming20101204的博客
08-16 4813
Multivariate Time Series Forecasting with LSTMs in Keras 中文版翻译像长期短期记忆(LSTM)神经网络的神经网络能够模拟多个输入变量的问题。这在时间序列预测中是一个很大的益处,其中古典线性方法难以适应多变量或多输入预测问题。 在本教程中,您将发现如何在Keras深度学习库中开发多变量时间序列预测的LSTM模型。 完成本教程后,您将知道:
lstm进行多元时间序列预测
大鱼的博客
09-25 3698
这个代码是之前趴的人家代码进行改的,思路也是设置滑动窗口,只是稍微绕一点 总之,都是把时间序列,转化成监督学习,然后利用监督学习的算法进行预测,长短记忆网络还是蛮好用的,只是需要提前安装TensorFlow和keras from numpy import nan from numpy import isnan from pandas import read_csv from pandas i...
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
Vico_Men CSDN认证博客专家 CSDN认证企业博客
码龄7年 暂无认证
- 27
- 原创
- 43万+
- 周排名
- 107万+
- 总排名
- 28万+
- 访问
- 等级
- 1743
- 积分
- 263
- 粉丝
- 276
- 获赞
- 124
- 评论
- 1000
- 收藏
小生不财: 而且博主写错了,在打标签那一栏代码,把标签和那个写成一样的了
huilangtai: 看到了啊,没看我也说了loss也小很小吗?
huilangtai: 想要预测的值
ChenYh420521: 你好 我想请问一下 这里的y是指什么呀 我没有看懂代码
张五分: 是的,我也遇到了同样问题。不能反归一化,不知道为啥