代码如下,利用神经网络作回归模型,用10折验证方法分别训练模型然后求出最小验证误差,取最小验证误差那一组为最终模型,我想返回那一组的权重,就用了两次if语句,训练时候用了一次为了把每一组训练得到的权重存放起来,第二次是找到了最小验证误差对应的那一组,然后将其之前存放的权重值再次传送给一直用于训练的权重,然后此模型相当于做出来了,接下来就可以作预测了。举例:我将10折训练中的第二组对应的权重self.input_weights在第二组训练完后赋值给了self.input_second,按理来说第三次训练完后,我的self.input_second的值应该不会发生变化,第三组训练完的权值顺延赋给了self.input_thirdl了,所以对我之前赋的值self.inputs_second没有任何冲突。但是我的值却变成了第三次训练完后的self.input_weights。不知道哪里的问题,我自己编写了一个类似的小程序,却没有出现类似的问题。请教大神指点。
for train_index,test_index in rs.split(x, y):
#print("Train Index:",train_index,",Test Index:",test_index)
X_train, X_test = x[train_index], x[test_index]
y_train, y_test = y[train_index], y[test_index]
cases = [1.0]*len(X_train)
labels = [1.0]*len(y_train)
X_cross = [1.0]*len(X_test)
#y_cross = [1.0]*len(y_test)
for i in range(len(X_train)):
cases[i]=[X_train[i]]
labels[i]=[y_train[i]]
for i in range(len(X_test)):
X_cross[i] = [X_test[i]]
#y_cross[i] = [y_test[i]]
#训练
self.train(cases, labels, 1000, 0.1, 0.1)
#验证
for i in range(len(X_cross)):
a = self.predict(X_cross[i])
cross_error[z] += 0.5*(a - y_test[i]) **2
cross_error[z] = cross_error[z] / len(X_cross)
print(f"cross_error is {cross_error[z]}")
if z == 0:
self.input_first = self.input_weights
self.output_first = self.output_weights
elif z == 1:
self.input_second = self.input_weights
self.output_second = self.output_weights
elif z == 2:
self.input_third = self.input_weights
self.output_third = self.output_weights
p = [35.1*3]
p = (p-arg)/std
print(self.predict(p))
elif z == 3:
self.input_forth = self.input_weights
self.output_forth = self.output_weights
elif z == 4:
self.input_fifth = self.input_weights
self.output_fifth = self.output_weights
elif z == 5:
self.input_sixth = self.input_weights
self.output_sixth = self.output_weights
elif z == 6:
self.input_seventh = self.input_weights
self.output_seventh = self.output_weights
elif z == 7:
self.input_eighth = self.input_weights
self.output_eighth = self.output_weights
print(self.input_eighth)
elif z == 8:
self.input_ninth = self.input_weights
self.output_ninth = self.output_weights
else:
self.input_tenth = self.input_weights
self.output_tenth = self.output_weights
z += 1
#取权重
#取最小验证误差的值以及对应的权重
mi = min(cross_error)
print(mi)
z = cross_error.index(min(cross_error))
print(z)
if z == 0:
self.input_weights = self.input_first
self.output_weights = self.output_first
elif z == 1:
self.input_weights = self.input_second
self.output_weights = self.output_second
elif z == 2:
self.input_weights = self.input_third
self.output_weights = self.output_third
elif z == 3:
self.input_weights = self.input_forth
self.output_weights = self.output_forth
elif z == 4:
self.input_weights = self.input_fifth
self.output_weights = self.output_fifth
elif z == 5:
self.input_weights = self.input_sixth
self.output_weights = self.output_sixth
elif z == 6:
self.input_weights = self.input_seventh
self.output_weights = self.output_seventh
elif z == 7:
self.input_weights = self.input_eighth
self.output_weights = self.output_eighth
print(self.input_eighth)
elif z == 8:
self.input_weights = self.input_ninth
self.output_weights = self.output_ninth
else:
self.input_weights = self.input_tenth
self.output_weights = self.output_tenth
p = [35.1*3]
p = (p-arg)/std
print(self.predict(p))
python程序中的属性赋值遇到的问题
最新推荐文章于 2024-06-21 23:43:35 发布