chao66666 2021-10-29 21:17 采纳率: 0%
浏览 15
已结题

tensorflow1.8训练参数不更新请教

我搭建了一个三层的DBN网络
结构维50-50-35-20-17
共三层RBM,提前预训练,最后一层做分类

网络定义如下,RBM的参数是用预训练的参数初始化的

def DBN_net(self):
        w1 = tf.Variable(self.rbm_list[0].w, name="w1")
        b1 = tf.Variable(deepcopy(self.rbm_list[0].hb), name="b1")
        probs = tf.nn.sigmoid(tf.matmul(self.x, w1) + b1)
        h1 = tf.nn.relu(tf.sign(probs - tf.random_uniform(tf.shape(probs))))
        
        w2 = tf.Variable(deepcopy(self.rbm_list[1].w), name="w2")
        b2 = tf.Variable(deepcopy(self.rbm_list[1].hb), name="b2")
        probs = tf.nn.sigmoid(tf.matmul(h1, w2) + b2)
        h2 = tf.nn.relu(tf.sign(probs - tf.random_uniform(tf.shape(probs))))
        
        w3 = tf.Variable(deepcopy(self.rbm_list[2].w), name="w3")
        b3 = tf.Variable(deepcopy(self.rbm_list[2].hb), name="b3")
        probs = tf.nn.sigmoid(tf.matmul(h2, w3) + b3)
        h3 = tf.nn.relu(tf.sign(probs - tf.random_uniform(tf.shape(probs))))
        
        input_size = tf.cast(h3.shape[1], tf.int32)
        
        w4 = tf.Variable(tf.truncated_normal([input_size, self.faults]), name="w4")
        b4 = tf.Variable(tf.zeros([self.faults]), dtype=tf.float32, name="b4")
        out = tf.matmul(h3, w4) + b4
        return out
def train(self):
      
        with tf.Session() as sess:
           
            out = self.DBN_net()
            logits = tf.nn.softmax(out)

           
            
            
            loss = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=out, labels=self.y))
            optimizer = tf.train.AdamOptimizer(self._opts._learning_rate).minimize(loss)
            correct_pred = tf.equal(tf.argmax(logits, 1), tf.argmax(self.y, 1))
            accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
            sess.run(tf.global_variables_initializer())
            for v in tf.trainable_variables():
                print(v)
                print(sess.run(v))
            for i in range(self._opts._epoches):
                for start, end in zip(range(0, len(self.x_train), self._opts._batchsize),
                                      range(self._opts._batchsize,
                                            len(self.x_train), self._opts._batchsize)):
                    batch_x = self.x_train[start:end]
                    batch_y = self.y_train[start:end]
                    

                    train_op, train_loss, train_acc = sess.run([optimizer, loss, accuracy],
                                                               feed_dict={self.x:batch_x, self.y:batch_y})
                    
                    # print("epoch {}, loss is {}, acc is {}".format(i, train_loss, train_acc))
            print("--------------------------")
            for v in tf.trainable_variables():
                print(v)
                print(sess.run(v))

打印了训练前后的权重,发现只有最后一层的权重和偏置会变,RBM的预训练的权重不会改变
请问是什么原因呢

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月6日
    • 修改了问题 10月29日
    • 创建了问题 10月29日

    悬赏问题

    • ¥15 短剧的sdk在哪里接入
    • ¥15 求:可不可以提供一些 在国内可以用,低代码不要太难 在电脑上可以下载的 制作app的软件
    • ¥60 找人回答kibana8.14.3二次集成开发,自定义插件ui导航栏如何设置
    • ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零
    • ¥15 不同模型怎么用同一个shader
    • ¥15 安卓启动没有ais proxy与v4l2的log打印
    • ¥15 go怎么读取mdb文件里面的数据
    • ¥60 Matlab联合CRUISE仿真编译dll文件报错
    • ¥15 脱敏项目合作,ner需求合作
    • ¥15 脱敏项目合作,ner需求合作