用 keras 搭建出一个判断今天是周几的模型? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zungmou
V2EX    Keras

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

  •  
  •   zungmou 2022-04-03 17:38:21 +08:00 4397 次点击
    这是一个创建于 1350 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    这就好像你用机器学习学加法一样. 不如研究一下机器如何能"理解"加法的规则.
    GRUNK
        6
    GRUNK  
       2022-04-03 19:37:32 +08:00 via iPhone
    这个不是有公式可以直接算出来那一天是周几的吗
    ynkkdev
        7
    ynkkdev  
       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 日是星期六
    zungmou
        8
    zungmou  
    OP
       2022-04-03 19:50:15 +08:00 via iPhone
    @jdhao 目的是尝试用神经网络
    zungmou
        9
    zungmou  
    OP
       2022-04-03 19:50:57 +08:00 via iPhone
    @omegatheta 能具体再说下吗?二进制化?
    zungmou
        10
    zungmou  
    OP
       2022-04-03 19:52:50 +08:00 via iPhone
    @GRUNK 嗯,重点不是算星期几的算法,是想搭建一套神经网络来试试看能不能做到计算。
    zungmou
        11
    zungmou  
    OP
       2022-04-03 19:54:28 +08:00 via iPhone
    @youngce 谢谢,我一会试试看 Python 内置的日历是否存在你说的这个问题。
    zungmou
        12
    zungmou  
    OP
       2022-04-03 19:56:00 +08:00 via iPhone
    @Licsber 没有搜索到类似问题,我的目的也是类似,能否给个链接?谢谢
    labulaka521
        13
    labulaka521  
       2022-04-03 20:53:10 +08:00
    我有个想法,用深度学习预测什么时候拉屎
    paopjian
        14
    paopjian  
       2022-04-03 20:56:44 +08:00
    机器学习不是用来解决精确数学的,是解决模糊数学的
    他们说的应该是这个问题吧 https://www.zhihu.com/question/51362842
    lizytalk
        15
    lizytalk  
       2022-04-03 23:41:51 +08:00 via iPhone   1
    @idblife 人家这明显就是用来练习的练习题呀,我们当时作业还做过让 lstm 学习整数加法呢……
    idblife
        16
    idblife  
       2022-04-03 23:50:05 +08:00 via iPhone
    @lizytalk
    知道 op 是为了联系,是想起我司 ai 部门有感而发
    ipwx
        17
    ipwx  
       2022-04-03 23:52:42 +08:00
    @lizytalk

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

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

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

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

    当然你也可以转换成四进制、八进制,十进制,六进制。这几个进制对于奇偶判定的问题都比较 easy 。若是转换为三进制、五进制,多看几位应当也能搞定。这就是机器学习和人做奇偶判定程序有区别的地方了,人的话必须先二进制,然后才能给答案,第一步特征工程必须非常精确。但是机器学习的话,稍微有点偏差,给个 X 进制,也能凑合着学出来。所以它比普通的程序算法要稍微“智能”那么一点。
    misdake
        19
    misdake  
       2022-04-04 00:20:31 +08:00
    神经网络很难做取模运算吧。可以试试输入二进制化后的一堆 0 和 1 ,输出改成分类而不是直接输出 1 个数字。
    daweii
        20
    daweii  
       2022-04-04 00:25:58 +08:00
    如果不怎么在乎实现难度的话可以考虑把年月日转换成 embedding 输入。
    mxT52CRuqR6o5
        21
    mxT52CRuqR6o5  
       2022-04-04 04:57:21 +08:00 via Android
    虽然在工业实践上不该这么做,但在学术上研究这些问题是有意义的
    ted2011
        22
    ted2011  
       2022-04-04 12:08:41 +08:00
    我记得 莫烦 有个类似的例子, 但一下找不到了, 你找找看
    ted2011
        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/

    当然, 你这个模型要比莫烦这个例子难不少, 有没有解都不好说.

    建议入门时选一些难度适宜的
    zungmou
        24
    zungmou  
    OP
       2022-04-04 15:47:26 +08:00
    @paopjian 谢谢
    zungmou
        25
    zungmou  
    OP
       2022-04-04 15:48:39 +08:00
    @ipwx 大佬,那换句话说,机器学习能够做到学会转换二级制吗?
    zungmou
        26
    zungmou  
    OP
       2022-04-04 15:49:56 +08:00
    @misdake 谢谢。
    zungmou
        27
    zungmou  
    OP
       2022-04-04 15:50:34 +08:00
    @ted2011 谢谢您
    RuiCBai
        28
    RuiCBai  
       2022-04-04 17:58:24 +08:00 via Android
    可以的!
    根据日期计算星期几是有公式的,叫蔡勒公式(但仅仅适用于 1582 年之后的日期)。
    你用神经网络判断周几,无非就是用神经网络拟合这个复杂的函数,根据通用近似定理,肯定是可以的。

    先可以根据这个公式生成大量样本,然后再训练。需要注意的是,不要使用 1582 年之前的日期,因为这样 样本可能不满足同分布 了,就会导致效果很差。
    ipwx
        29
    ipwx  
       2022-04-05 00:42:48 +08:00
    @zungmou 你得设置合适的目标函数。。。但反过来这可能又等价于你转换成二进制了。
    ipwx
        30
    ipwx  
       2022-04-05 00:44:48 +08:00
    @RuiCBai universal approximation theory 只说了,神经网络能表示任何一个可测集上的连续函数函数,但是不保证你的训练方法能恰好找到这个潜在的函数。大部分情况下训练样本外的数据,现在的神经网络并不保证能给出有意义的解。
    ipwx
        31
    ipwx  
       2022-04-05 00:46:48 +08:00
    @RuiCBai 训练样本分布外

    假设训练样本的分布是 p(x),那么现在的大部分训练出来的神经网络在 p(x) 定义域之外的分布上并不能给出有意义的解。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     814 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 22:20 PVG 06:20 LAX 14:20 JFK 17:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86