Re: [问题] 深度学习(deep learning)出问题

楼主: pipidog (如果狗狗飞上天)   2017-09-22 02:59:57
本来用推文的,但越推越长,所以简单回文好了.没仔细搞懂你的
程式码,但看到几点问题:
1.正常的情况下,如果你要做的是分类器,你的output应该是softmax,
而不是用sigmoid,这不是正常会采用的输出层修正.如果要搞懂
softmax,你最好也花点时间搞懂cross entropy.如果你要做的是回
归器,一般会用均方差.(但我不懂为啥你的程式的loss定义的是
平均差? 除非正负号对误差有意义,不然这很少用.你最好确定一下)
2.新版的tensorflow,已经把initialize_all_variabel改成
tf.global_variables_initializer,你的范例有点旧了.
3.一般来说,多层感知器(也就是最简单的全连结神经网络)我们不会
去设定太多层,通常设个一两层就够了.如果你觉得结果不好,先试
试看把节点加多,而不是把层加厚.这会让你的模型简单一些.如果
还是不好,我们再试试看增加层数.不要一股脑地就就出很多层的
结构.这样不仅难以分析,也很容易造成过拟合.
4.一个好的机器学习模型,不是不停地增加复杂度,让问题可以被拟
合的越准越好,而是设计出一个模型,用最低程度的复杂度来回答
出问题最好.因为真实场景下的资料是不会尽如人意的,过于复杂
的模型除了浪费资源外,你也不容易修正模型.所以一看到问题就
先给他来个10层,20层不是好事.
5.看的出来你对机器学习还有神经网络不太懂,其实对于初学者,我是
不推荐一开始就从tensorflow上手的,我建议你应该先学scikit learn
跟Keras. scikit learn集成了很多机器学习的模型,你会比较了解
"分类,回归,聚类(clustering),降维"这机器学习中的四大基本观念.
然后你再进到神经网络里面,你会发现神经网络看似复杂,其实也就
是换个手段来处理上面这四大类问题而已.本质上差异不大.
6.如果你开始要进到神经网络了,我建议你可以先试着从Keras上手,
Keras是基于tensorflow的高阶API,他是以模型导向的方式让你建
构神经网络.而且Keras已经被收录到tensorflow中了,之后应该会
从contrib中移到正式的架构内. 从Keras下手可以先帮助你了解
模型,再去深究tensorflow的语法.
如果你对机器学习的模型一无所知就想透过学tensorflow来理解
机器模型,是很容易吃鳖的,模型一个没搞懂就先被他复杂的架构
给淹没了(其实我甚至觉得tensorflow根本就是设计来做后端,他
本来就不该拿来做前端使用,你有需要每次开车都先从组装轮子
开始?).这就像是你想学开车,你该做的事情是先去上驾训班,而不
是去学汽车组装.这不是不行,但那是等你有一天把车玩精了,想
改车的时候在做的事情.
说了这么多,还是想讲一点,机器学习的本质,核心,是那些一个一个
的模型,模型懂了,其实用哪套东西实作反而是次要的了.
作者: st1009 (前端攻城师)   2017-09-23 00:03:00
是可以做到上万笔,我们使用爬虫每天再网络上抓资料,之后还会架相关实验网站,那时候确实有机会
作者: vfgce (小兵)   2017-09-23 00:00:00
DL又不是万灵丹,很多时候也没比传统SVM,RF,MLP好...若是有到万笔以上,倒是可以试看看DL...
作者: vfgce (小兵)   2017-09-22 23:56:00
唉,了解.......
作者: st1009 (前端攻城师)   2017-09-22 23:58:00
每天成长10~80比数据左右,如果改架构,可能一天提升上千到上万笔数据,不过等熟了才会做大
作者: st1009 (前端攻城师)   2017-09-22 23:39:00
作者: vfgce (小兵)   2017-09-22 23:39:00
可以看一下keras文档,应该比tensorflow好懂多了...
作者: vfgce (小兵)   2017-09-22 23:37:00
弄错的话,结果就会有问题...
作者: st1009 (前端攻城师)   2017-09-22 23:37:00
嗯,只要审查委员不要再提奇怪意见,应该不会超过2元分类
作者: st1009 (前端攻城师)   2017-09-22 23:43:00
嗯阿...我刚载好keras...用过有问题再研究sklearn好了>"<
作者: vfgce (小兵)   2017-09-22 23:41:00
你的问题应该用sklearn的MLPClassifier处理就好了...
作者: st1009 (前端攻城师)   2017-09-22 23:54:00
具体我跟教授都不知道,可能是因为我们的数据会慢慢长大吧那个评审委员很奇怪...只要我教授投一次论文,就算跟本实验无关的论文,他都会特别提到这篇,说要做DL...甚至他还说我们广而不精,所以...我教授就派我和组员来做DL了...
作者: vfgce (小兵)   2017-09-22 23:51:00
审查委员为何建议deep learning?资料不够多也无法显出deep learning的优势...
作者: st1009 (前端攻城师)   2017-09-22 23:07:00
好的,我会研究的 <3那...我等等多加一些注解(?
作者: vfgce (小兵)   2017-09-22 23:05:00
再看一下,应该改用对数概似函数当loss function.对tensorflow完全不熟,看起来很不习惯...
作者: st1009 (前端攻城师)   2017-09-22 23:03:00
https://pastebin.com/n114yHzZ这是我现在正在尝试的程式码,跑成功时有83%准确率,但...不知为何常常跑不起来,可能是初始权重问吧...
作者: vfgce (小兵)   2017-09-22 23:00:00
目前看来应该是loss function问题...你用的显然不对..
作者: st1009 (前端攻城师)   2017-09-22 22:55:00
嗯,注解是因为范例版是用reduce_mean,但我觉得怪怪的...所以删除用用看,但没看到明显改善,所以就先注解了 >///<其实不只是没有明显改善...是用了根本无法训练...
作者: vfgce (小兵)   2017-09-22 22:53:00
#loss = tf.reduce_sum( tf.square( ys - prediction ) )这个你注解的才是对的...loss function 错掉,整个走钟...
作者: st1009 (前端攻城师)   2017-09-22 22:53:00
是的,我之后应该会改掉,只是还没确定怎改
作者: vfgce (小兵)   2017-09-22 22:52:00
loss = tf.reduce_mean(tf.reduce_sum((ys - prediction)))这是你执行时的loss function吗?
作者: st1009 (前端攻城师)   2017-09-22 21:25:00
基本上如果可以我也希望直接跑出01啦https://goo.gl/F8CeB1 但如这篇文说神经元像逻辑回归,可是我看的那篇论文就是在sigmoid后,把0.5以上视为1如果v大认为我是红绿蓝三色编码012那样的话,其实我不是,我输入的类别资料是经过TF-IDF及NGD计算转化过的
作者: joeyccc1 (Joey)   2017-09-22 21:15:00
其实也没有那么夸张啦用0.5判断那边比较像是argmax后的prediction 原PO如果续要的话站内给我信相我可以把改过的code寄给你*需要 *信箱
作者: st1009 (前端攻城师)   2017-09-22 21:10:00
其实...我有学过统计阿...我的实验是参考我学长的正式论文,只是他的分类是用逻辑回归,而审查委员希望使用DL,所以接下来我们就使用DL来进行分类...
作者: vfgce (小兵)   2017-09-22 23:28:00
我觉得你的问题,在于loss function及activvation function的选择,刚又看了一下,二元分类的话,activation用relu或sigmoid都可以,但sigmoid易有梯度消失, output用sigmoid,超过二元分类再用softmax, loss 用binary crossentropy这些在keras都有已写好,直接套用即可,自己写容易出错..但是你得研究一下,activation,loss, optimizer怎么搭才对
作者: st1009 (前端攻城师)   2017-09-22 23:17:00
https://pastebin.com/ZDcwta2g 我加了些注解,说明每个区块再做什么,希望这可以让您阅读方便些嗯,等我研究好keras,应该就会用他了>////<
作者: vfgce (小兵)   2017-09-22 23:15:00
你如果做二元分类的话,最简单就是hidden用relu,ouput用softmax,loss 用cross entrophy....你不用自己写loss的细节,很容易出错...
作者: st1009 (前端攻城师)   2017-09-22 23:13:00
我跟组员讨论过,可以,但还没找到范例>"<
作者: vfgce (小兵)   2017-09-22 23:09:00
可以改用keras做吗?这些细节它会代处理...
作者: vfgce (小兵)   2017-09-22 20:42:00
我的天啊,你完全没概念....,你先弄懂资料怎么整理...二元分类你要事先就处理好,而不是跑出答案来再分...你绝对不要再碰tensorflow,乖乖先学scitkit learn....可以的话,看点统计学,先了解什么名目,顺序,等距,等比...其实没有统计学概念的人贸然进入资料科学有点危险....最基本的类别资料和连续数值资料的处理,及混合两者的处理观念要清楚啊, 很多人随便就把类别资料当数值资料用.例如红绿蓝三色编码为0,1,2,没有再整理就直接用,观念整个错这也是python的一大问题,很多类别资料直接用整数编码,很多人根本想都不想就直接用下去.R在这方面就好多了,R的类别资料以factor处理,不易和数值资料搞混,也让人比较会注意到要进行转换..
作者: st1009 (前端攻城师)   2017-09-22 20:23:00
我做的其实是2元分类,基本上跑出来的数值大于0.5我就视为1,小于视为0这样,sigmoid是为了把数值缩在0~1方便判断跑我程式,看到蓝色的点就是正确的答案~
作者: vfgce (小兵)   2017-09-22 15:45:00
呃,没仔细看code,如果你做的是回归那先从linear regression下手,先了解什么是回归,什么是分类.....回归一般用于输出为连续资料,分类用于输出为离散资料...另外logistic regression虽然名字是回归,但其实在做分类...若要玩deep learning,请先花点时间搞懂类神经网络再来...冒然越级打怪是很危险的....不是所有资料都可以用deep learning 做...
作者: st1009 (前端攻城师)   2017-09-22 11:01:00
非常感谢您无私的教学!!m(_ _)m话说使用softmax真的都是1,就算降低层数也是Q
作者: joeyccc1 (Joey)   2017-09-22 03:08:00
原po的code比较像回归吧?他label这样softmax下去都是1阿
作者: f496328mm (为什么会流泪)   2017-09-23 10:02:00
最近 DL 很红,很多教授都想做这块,什么都要搭上 AI,DL 不是万灵丹,其实 ML 也很强,
作者: st1009 (前端攻城师)   2017-09-23 10:17:00
其实DL就是一种ML不是嘛?
作者: sean50301 ( (づ′・ω・)づ)   2017-09-23 13:26:00
由此例看到ML不能只会看范例程式码照搬XD机统的基础还是很重要的
作者: f496328mm (为什么会流泪)   2017-09-23 13:30:00
ML 很多概念都跟回归有关 机统的基础蛮重要的

Links booklink

Contact Us: admin [ a t ] ucptt.com