python程序中的属性赋值遇到的问题

    代码如下,利用神经网络作回归模型,用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)) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值