验证准确性达到1,损失非常高

如何解决验证准确性达到1,损失非常高

我有3个非常具体的问题:

  1. 我正在训练一个回归模型-日期集很小(300)-,并且在第4个时期到最后一个时期的验证精度为1.00!在最后一个时期的训练精度为0.9957,而损失实际上是33,所以我不知道准确性和损失都很高! 使用优化器ADAM和损失(mean_absolute_error)

  2. 缩放输入时,尽管我没有任何负值,但有些值会变为负值,这合理吗?而且我注意到缩放后有些相似的数字并不相同。

  3. 当我预测时,我应该按缩放输入的相同方式缩放要预测的数据,否?但是我如何确定这一点呢?据我所知,所有行中的输入都按比例缩放。

    array=SData.to_numpy()
    array
    

array([[6.25,6.25,6.25,...,8.11521, 13.525349, 744.421033], [6.25,6.25,6.25,...,8.998918、14.981864, 744.484697], [6.25,6.25,6.25,...,8.931293、14.885489, 744.484629], ..., [6.160831,8.157965,9.184461,...,6.170488,10.284147, 938.598232], [6.160831,8.157965,9.184461,...,12.417958,20.696597, 938.291951], [6.160831,8.157965,9.184461,...,6.007829,10.013048, 938.103987]])

unscaled_inputs=array[:,:9]
unscaled_inputs
targets=array[:,9:]
unscaled_inputs array([[ 6.25,6.25,...,0.      ],[ 6.25,15.      ],30.      ],[ 6.160831,8.157965,9.184461,8.640023,8.996907,45.      ],60.      ],75.      ]])
scaled_inputs=preprocessing.scale(unscaled_inputs)
scaled_inputs

array([[0.64061068,-1.55811375,-1.96681483,...,-0.96073795, -1.709721,-1.46385011], [0.64061068,-1.55811375,-1.96681483,...,-0.96073795, -1.709721,-0.87831007], [0.64061068,-1.55811375,-1.96681483,...,-0.96073795, -1.709721,-0.29277002], ..., [0.35930701、1.56499191、1.66411229,...,0.76559569, 0.84111767,0.29277002], [0.35930701、1.56499191、1.66411229,...,0.76559569, 0.84111767,0.87831007], [0.35930701、1.56499191、1.66411229,...,0.76559569, 0.84111767,1.46385011]])

shuffled_indicies=np.arange(scaled_inputs.shape[0])
np.random.shuffle(shuffled_indicies)
shuffled_indicies

array([257,191,37,128,72,247,161,252,140,264,258,255, 278, 148、231、186、31、83、230、175、121、156、151、256、192、200, 66、59、199、9、223、157、214、73、92、61、60、139、47, 280、202、104、110、22、39、197、81、225、69、94、284、18, 113、187、267、173、91、90、111、180、144、20、287、153、131, 103、268、172、260、193、141、224、179、87、106、96、274、85, 89、105、84、75、15、160、52、24、126、16、235、124、44 40、249、34、63、219、11、198、149、118、277、222、238、209, 127、272、184、107、5、146、169、57、116、170、82、23、207, 174、188、88、206、7、36、226、86、150、276、163、62、12 253、204、45、74、210、14、108、195、196、4、109、263、241, 147、78、176、33、10、232、248、42、43、50、97、270、117, 254、181、201、266、182、38、211、218、212、26、239、41、55, 275、77、189、30、122、80、58、271、19、119、158、154、177, 53,70,265,99,205,165,250,178,49,213,136,240,6, 208、25、32、217、246、285、237、3、227、155、190、259、159, 269、138、167、216、234、64、281、133、137、166、2、54、112, 13,65,279,114,95,100,1,125,282,185,145,102,29, 135、0、101、71、164、17、28、130、68、262、56、245、129, 244、236、283、67、8、79、134、35、51、120、168、194、21, 27、98、251、115、273、123、233、76、286、228、243、220、162, 142、229、203、152、143、221、242、171、48、93、132、183、215, 261,46])

shuffled_inputs=scaled_inputs[shuffled_indicies]
shuffled_targets=targets[shuffled_indicies]
#define the numcer of observations
observations_count=shuffled_inputs.shape[0]
# 80 10 10 Rule
train_count=int(0.8 * observations_count)
validation_count=int(0.1 * observations_count )
test_count=observations_count-train_count-validation_count

    train_inputs=shuffled_inputs[:train_count]
    train_targets=shuffled_targets[:train_count]
   validation_inputs=shuffled_inputs[train_count:train_count+validation_count]
 validation_targets=shuffled_targets[train_count:train_count+validation_count]
    test_inputs=shuffled_inputs[train_count+validation_count:]
    test_targets=shuffled_targets[train_count+validation_count:]


np.savez('Sample_Data_Train',inputs=train_inputs,targets=train_targets)
    np.savez('Sample_Data_Validation',inputs=validation_inputs,targets=validation_targets)
    np.savez('Sample_Data_Test',inputs=test_inputs,targets=test_targets)
npz=np.load(r"C:\Users\dai_k\OneDrive\Desktop\GRASSHOPPERS\Second semester\Thesis\samplenpz\Sample_Data_Train.npz")
Processed_train_inputs=npz['inputs'].astype(np.float)
processed_train_targets=npz['targets'].astype(np.float)

npz1=np.load(r"C:\Users\dai_k\OneDrive\Desktop\GRASSHOPPERS\Second semester\Thesis\samplenpz\Sample_Data_Validation.npz")
processed_validation_inputs=npz1['inputs'].astype(np.float)
processed_validation_targets=npz1['targets'].astype(np.float)

npz2=np.load(r"C:\Users\dai_k\OneDrive\Desktop\GRASSHOPPERS\Second semester\Thesis\samplenpz\Sample_Data_Test.npz")
processed_test_inputs=npz2['inputs'].astype(np.float)
processed_test_targets=npz2['targets'].astype(np.float)


output_size=8
hidden_layer_size=100 # START WITH ANY WIDTH - This is a hyperbarameter

model=tf.keras.Sequential([
                          tf.keras.layers.Dense(hidden_layer_size,activation='relu'),tf.keras.layers.Dense(hidden_layer_size,tf.keras.layers.Dense(output_size,activation='relu')
                           ]) 

model.compile(optimizer='adam',loss='mean_absolute_error',metrics=['accuracy'])

batch_size=8
max_epochs=30
early_stopping=tf.keras.callbacks.EarlyStopping()

model.fit(Processed_train_inputs,processed_train_targets,batch_size=batch_size,epochs=max_epochs,callbacks=[early_stopping],validation_data=(processed_validation_inputs,processed_validation_targets),verbose=2 ) 

Results

解决方法

这是一个回归问题,您使用了MAE损失函数。因此,损失的值不可能很小(分数,如分类损失),我认为这对于回归类型分析是合乎逻辑的。

您正在标准化数据集而不是标准化。标准化通常意味着缩放变量以使其具有一组介于0到1之间的值,而标准化将数据转换为均值为零且标准偏差为1。因此,使用scale将数据转换为零均值,因此发生。您可以使用normalizer或使用原始编码进行数据标准化。

是的,您应该在预测时对数据进行标准化。否则,由于训练和测试数据的变化(由于训练和测试中的数据分布不同),性能将很差。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-