用 keras 搭建出一个判断今天是周几的模型?

2022-04-03 17:38:21 +08:00
 zungmou

有没有前辈,能不能教下,如何用 keras 搭建一个模型,例如

x=[[2022, 12, 31]] x.shape = (-1, 3) y=[[6]] y.shape = (-1, 1)

x 对应日期,y 对应星期几,生成从 1000 年到 2021 年所有的日期对应的周几进行训练,这种模型要如何搭建?

我用了 Dense(64, activation='relu', input_shape=(3,)) Dense(64, activation='relu') Dense(1) 模型训练,并不能得到一个很好的结果。 刚入门,希望有前辈能给一点提示。

3228 次点击
所在节点    Keras
31 条回复
idblife
2022-04-03 18:16:34 +08:00
有时候挺服搞机器学习的
搞了这算法那算法,一看效果还不如十几年前用 sql 写的数据分析。。。
Licsber
2022-04-03 18:27:21 +08:00
推荐知乎镜像问题:如何用深度学习判断某数是否是 2 的倍数?
这类问题对这种依靠“经验”的概率模型无解
建议 OP 放弃尝试 转而去研究 cv
jdhao
2022-04-03 18:31:21 +08:00
这个还需要模型吗,这都是固定算法可以算出来的
omegatheta
2022-04-03 18:39:35 +08:00
你把你的输入二进制化可能还好点
Jooooooooo
2022-04-03 19:25:47 +08:00
?

一个 O(1) 的公式咋还扯上机器学习了?

这就好像你用机器学习学加法一样. 不如研究一下机器如何能"理解"加法的规则.
GRUNK
2022-04-03 19:37:32 +08:00
这个不是有公式可以直接算出来那一天是周几的吗
youngce
2022-04-03 19:41:08 +08:00
补充一点:在一些计算机程序中,按照简单的算法直接反推公元 1 年 1 月 1 日,是星期一。

但是教皇格里戈八世在 1582 年 2 月 24 日颁布法令,永远抹去了 1582 年 10 月 5 日到 1582 年 10 月 14 日。历史上从来不曾有过这 10 天。1582 年 10 月 4 日是星期四,它的第二天是 1582 年 10 月 15 日星期五。

因此考虑到这 10 天的影响再去推算,公元元年 1 月 1 日就是星期六了。

这也是很多日历为什么显示公元元年 1 月 1 日是星期六
zungmou
2022-04-03 19:50:15 +08:00
@jdhao 目的是尝试用神经网络
zungmou
2022-04-03 19:50:57 +08:00
@omegatheta 能具体再说下吗?二进制化?
zungmou
2022-04-03 19:52:50 +08:00
@GRUNK 嗯,重点不是算星期几的算法,是想搭建一套神经网络来试试看能不能做到计算。
zungmou
2022-04-03 19:54:28 +08:00
@youngce 谢谢,我一会试试看 Python 内置的日历是否存在你说的这个问题。
zungmou
2022-04-03 19:56:00 +08:00
@Licsber 没有搜索到类似问题,我的目的也是类似,能否给个链接?谢谢
labulaka521
2022-04-03 20:53:10 +08:00
我有个想法,用深度学习预测什么时候拉屎
paopjian
2022-04-03 20:56:44 +08:00
机器学习不是用来解决精确数学的,是解决模糊数学的
他们说的应该是这个问题吧 https://www.zhihu.com/question/51362842
lizytalk
2022-04-03 23:41:51 +08:00
@idblife 人家这明显就是用来练习的练习题呀,我们当时作业还做过让 lstm 学习整数加法呢……
idblife
2022-04-03 23:50:05 +08:00
@lizytalk
知道 op 是为了联系,是想起我司 ai 部门有感而发
ipwx
2022-04-03 23:52:42 +08:00
@lizytalk

机器学习不是魔法,需要特征工程。

但是题目中的问题一旦涉及到特征工程,就和朴素的算星期几没有多少差别了。
ipwx
2022-04-03 23:57:12 +08:00
ps 补充“特征工程”这个论点。

如何用神经网络学习奇偶判定?直接放进去一个数是不行的,因为机器学习模型在这个问题上,任何超出训练集范围的数都是“训练分布外的数据”,不能得到有意义的输出。

正确的方法是比如,转换成二进制,拆成若干 0/1 串。。。。那恭喜你,正确答案就是看最低位的。这个机器学习能学到。但是已经转换成二进制了,那和直接写出奇偶判定的程序,也差别不大了。

当然你也可以转换成四进制、八进制,十进制,六进制。这几个进制对于奇偶判定的问题都比较 easy 。若是转换为三进制、五进制,多看几位应当也能搞定。这就是机器学习和人做奇偶判定程序有区别的地方了,人的话必须先二进制,然后才能给答案,第一步特征工程必须非常精确。但是机器学习的话,稍微有点偏差,给个 X 进制,也能凑合着学出来。所以它比普通的程序算法要稍微“智能”那么一点。
misdake
2022-04-04 00:20:31 +08:00
神经网络很难做取模运算吧。可以试试输入二进制化后的一堆 0 和 1 ,输出改成分类而不是直接输出 1 个数字。
daweii
2022-04-04 00:25:58 +08:00
如果不怎么在乎实现难度的话可以考虑把年月日转换成 embedding 输入。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX