本来用推文的,但越推越长,所以简单回文好了.没仔细搞懂你的
程式码,但看到几点问题:
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根本就是设计来做后端,他
本来就不该拿来做前端使用,你有需要每次开车都先从组装轮子
开始?).这就像是你想学开车,你该做的事情是先去上驾训班,而不
是去学汽车组装.这不是不行,但那是等你有一天把车玩精了,想
改车的时候在做的事情.
说了这么多,还是想讲一点,机器学习的本质,核心,是那些一个一个
的模型,模型懂了,其实用哪套东西实作反而是次要的了.