有没有前辈,能不能教下,如何用 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) 模型训练,并不能得到一个很好的结果。 刚入门,希望有前辈能给一点提示。
1
idblife 2022-04-03 18:16:34 +08:00
有时候挺服搞机器学习的
搞了这算法那算法,一看效果还不如十几年前用 sql 写的数据分析。。。 |
2
Licsber 2022-04-03 18:27:21 +08:00
推荐知乎镜像问题:如何用深度学习判断某数是否是 2 的倍数?
这类问题对这种依靠“经验”的概率模型无解 建议 OP 放弃尝试 转而去研究 cv |
3
jdhao 2022-04-03 18:31:21 +08:00 via Android
这个还需要模型吗,这都是固定算法可以算出来的
|
4
omegatheta 2022-04-03 18:39:35 +08:00 via Android
你把你的输入二进制化可能还好点
|
5
Jooooooooo 2022-04-03 19:25:47 +08:00
?
一个 O(1) 的公式咋还扯上机器学习了? 这就好像你用机器学习学加法一样. 不如研究一下机器如何能"理解"加法的规则. |
6
GRUNK 2022-04-03 19:37:32 +08:00 via iPhone
这个不是有公式可以直接算出来那一天是周几的吗
|
7
youngce 2022-04-03 19:41:08 +08:00 1
补充一点:在一些计算机程序中,按照简单的算法直接反推公元 1 年 1 月 1 日,是星期一。
但是教皇格里戈八世在 1582 年 2 月 24 日颁布法令,永远抹去了 1582 年 10 月 5 日到 1582 年 10 月 14 日。历史上从来不曾有过这 10 天。1582 年 10 月 4 日是星期四,它的第二天是 1582 年 10 月 15 日星期五。 因此考虑到这 10 天的影响再去推算,公元元年 1 月 1 日就是星期六了。 这也是很多日历为什么显示公元元年 1 月 1 日是星期六 |
9
zungmou OP @omegatheta 能具体再说下吗?二进制化?
|
13
labulaka521 2022-04-03 20:53:10 +08:00
我有个想法,用深度学习预测什么时候拉屎
|
14
paopjian 2022-04-03 20:56:44 +08:00
机器学习不是用来解决精确数学的,是解决模糊数学的
他们说的应该是这个问题吧 https://www.zhihu.com/question/51362842 |
15
lizytalk 2022-04-03 23:41:51 +08:00 via iPhone 1
@idblife 人家这明显就是用来练习的练习题呀,我们当时作业还做过让 lstm 学习整数加法呢……
|
18
ipwx 2022-04-03 23:57:12 +08:00 2
ps 补充“特征工程”这个论点。
如何用神经网络学习奇偶判定?直接放进去一个数是不行的,因为机器学习模型在这个问题上,任何超出训练集范围的数都是“训练分布外的数据”,不能得到有意义的输出。 正确的方法是比如,转换成二进制,拆成若干 0/1 串。。。。那恭喜你,正确答案就是看最低位的。这个机器学习能学到。但是已经转换成二进制了,那和直接写出奇偶判定的程序,也差别不大了。 当然你也可以转换成四进制、八进制,十进制,六进制。这几个进制对于奇偶判定的问题都比较 easy 。若是转换为三进制、五进制,多看几位应当也能搞定。这就是机器学习和人做奇偶判定程序有区别的地方了,人的话必须先二进制,然后才能给答案,第一步特征工程必须非常精确。但是机器学习的话,稍微有点偏差,给个 X 进制,也能凑合着学出来。所以它比普通的程序算法要稍微“智能”那么一点。 |
19
misdake 2022-04-04 00:20:31 +08:00
神经网络很难做取模运算吧。可以试试输入二进制化后的一堆 0 和 1 ,输出改成分类而不是直接输出 1 个数字。
|
20
daweii 2022-04-04 00:25:58 +08:00
如果不怎么在乎实现难度的话可以考虑把年月日转换成 embedding 输入。
|
21
mxT52CRuqR6o5 2022-04-04 04:57:21 +08:00 via Android
虽然在工业实践上不该这么做,但在学术上研究这些问题是有意义的
|
22
ted2011 2022-04-04 12:08:41 +08:00
我记得 莫烦 有个类似的例子, 但一下找不到了, 你找找看
|
23
ted2011 2022-04-04 12:14:55 +08:00
找到了, 莫烦的例子是
# 中文的 "年-月-日" -> "day/month/year" "98-02-26" -> "26/Feb/1998" https://mofanpy.com/tutorials/machine-learning/nlp/seq2seq/ 当然, 你这个模型要比莫烦这个例子难不少, 有没有解都不好说. 建议入门时选一些难度适宜的 |
28
RuiCBai 2022-04-04 17:58:24 +08:00 via Android
可以的!
根据日期计算星期几是有公式的,叫蔡勒公式(但仅仅适用于 1582 年之后的日期)。 你用神经网络判断周几,无非就是用神经网络拟合这个复杂的函数,根据通用近似定理,肯定是可以的。 先可以根据这个公式生成大量样本,然后再训练。需要注意的是,不要使用 1582 年之前的日期,因为这样 样本可能不满足同分布 了,就会导致效果很差。 |
30
ipwx 2022-04-05 00:44:48 +08:00
@RuiCBai universal approximation theory 只说了,神经网络能表示任何一个可测集上的连续函数函数,但是不保证你的训练方法能恰好找到这个潜在的函数。大部分情况下训练样本外的数据,现在的神经网络并不保证能给出有意义的解。
|
31
ipwx 2022-04-05 00:46:48 +08:00
|