会用python做神经网络的大佬请进,有具体问题求教!

nixing123 2017-05-23 12:12:09
毕业设计选了这个题目,然后我发现自己给自己挖了个坑!!!
我爬取了链家网的租房数据,共1619条,想通过神经网络对租房价格进行预测。

输入文件data.csv,其数据格式如下:

从左到右,依次是装修,是否限制,面积,楼层,朝向,临近地铁,区域

我做了如下的简单归一化处理(我也不知道,我这样算不算归一化)


result为租金的数据,即输出。

数据文件都在这里
其中,ordata是原始的数据,data是处理后的输入数据,result是输出数据

代码参考的是这里

下面是我的代码,用的是python2.7
import numpy as np
import matplotlib.pyplot as plt

def logsig(x):
return 1/(1+np.exp(-x))

#x是输入单元,y是输出单元
x = np.loadtxt('data.csv',delimiter=',',dtype='int').T

y = np.loadtxt('result.csv',delimiter=',',dtype='int').T
list =[]
for i in xrange(len(y)):
list.append(y[i])
y = np.array([list])

np.random.seed(1)

maxepochs = 2000#训练次数
learnrate = 0.035#学习效率
errorfinal = 0.05#预期误差
samnum = 1619#样本数量
indim = 7#输入神经元个数
outdim = 1#输出神经元个数
hiddenunitnum = 7#隐层神经元个数

w1 = 0.5*np.random.rand(hiddenunitnum,indim)-0.1 #8*3 输入层与隐藏层的连接权值
b1 = 0.5*np.random.rand(hiddenunitnum,1)-0.1 #7*1 隐藏层与输出层的连接权值
w2 = 0.5*np.random.rand(outdim,hiddenunitnum)-0.1 #1*7 隐藏层各个神经元的阈值
b2 = 0.5*np.random.rand(outdim,1)-0.1 #1*1 输出层各神经元的阈值

errhistory = []

for i in range(maxepochs):
hiddenout = logsig((np.dot(w1,x).transpose()+b1.transpose())).transpose()
networkout = (np.dot(w2,hiddenout).transpose()+b2.transpose()).transpose()
err = y - networkout
sse = sum(sum(err**2))

errhistory.append(sse)
if sse < errorfinal:
break

delta2 = err

delta1 = np.dot(w2.transpose(),delta2)*hiddenout*(1-hiddenout)

dw2 = np.dot(delta2,hiddenout.transpose())
db2 = np.dot(delta2,np.ones((samnum,1)))

dw1 = np.dot(delta1,x.transpose())
db1 = np.dot(delta1,np.ones((samnum,1)))

w2 += learnrate*dw2
b2 += learnrate*db2

w1 += learnrate*dw1
b1 += learnrate*db1


# 误差曲线图
errhistory10 = np.log10(errhistory)
minerr = min(errhistory10)
print errhistory10
print minerr
plt.plot(errhistory10)
plt.plot(range(0,i+1000,1000),[minerr]*len(range(0,i+1000,1000)))

ax=plt.gca()
ax.set_yticks([-2,-1,0,1,2,minerr])
ax.set_yticklabels([u'$10^{-2}$',u'$10^{-1}$',u'$1$',u'$10^{1}$',u'$10^{2}$',str(('%.4f'%np.power(10,minerr)))])
ax.set_xlabel('iteration')
ax.set_ylabel('error')
ax.set_title('Error History')
plt.savefig('errorhistory.png',dpi=700)
plt.close()


结果,算出来的权值和阈值都是无限大,误差曲线图竟然是发散的,是我的数据问题吗?
调整学习率,隐层单元数,训练次数,都没效果。



我自己也是依葫芦画瓢,一出问题就不会解决了,所以请求大佬解惑!

...全文
533 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧