TensorFlow tf.train.Saver()在tf.contrib.layers.fully_connected()上不起作用

时间:2018-09-06 16:56:33

标签: python python-3.x tensorflow

所以我写了这个通用的TensorFlow代码,并希望建立saverestore模型。但是显然错误是没有变量要保存。我按照官方example的规定进行了所有操作。 忽略 __init__方法,但最后一行除外,因为它只使用相关参数来训练模型,因此也没有语法错误。它产生的错误在代码下方给出。

class Neural_Network(object):
    
    def __init__(self, numberOfLayers, nodes, activations, learningRate,  
                 optimiser = 'GradientDescent', regularizer = None, 
                 dropout = 0.5, initializer = tf.contrib.layers.xavier_initializer()):
        self.numberOfLayers = numberOfLayers
        self.nodes = nodes
        self.activations = activations
        self.learningRate = learningRate
        self.regularizer = regularizer
        self.dropout = dropout
        self.initializer = initializer
        if(optimiser == 'GradientDescent'):
            self.optimiser = tf.train.GradientDescentOptimizer(self.learningRate)
        elif(optimiser == 'AdamOptimiser'):
            self.optimiser = tf.train.AdamOptimizer(self.learningRate)
        self.saver = tf.train.Saver()
        
        
    def create_Neural_Net(self, numberOfFeatures):
        self.numberOfFeatures = numberOfFeatures
        self.X = tf.placeholder(dtype = tf.float32, shape = (None, self.numberOfFeatures), name = 'Input_Dataset')
        #self.output = None
        
        for i in range(0, self.numberOfLayers):
            if(i == 0):
                layer = tf.contrib.layers.fully_connected(self.X, self.nodes[i], 
                                                          activation_fn = self.activations[i],
                                                          weights_initializer = self.initializer, 
                                                          biases_initializer = self.initializer)                
            elif(i == self.numberOfLayers-1):
                self.output = tf.contrib.layers.fully_connected(layer, self.nodes[i], 
                                                                activation_fn = self.activations[i],
                                                                weights_initializer = self.initializer, 
                                                                biases_initializer = self.initializer)
            else:
                layer = tf.contrib.layers.fully_connected(layer, self.nodes[i], 
                                                          activation_fn = self.activations[i],
                                                          weights_initializer = self.initializer, 
                                                          biases_initializer = self.initializer)
                
    
    def train_Neural_Net(self, dataset, labels, epochs):
        entropy = tf.nn.softmax_cross_entropy_with_logits_v2(logits = self.output, labels = labels, name = 'cross_entropy')
        loss = tf.reduce_mean(entropy, name = 'loss')
        hypothesis = tf.nn.softmax(self.output)
        correct_preds = tf.equal(tf.argmax(hypothesis, 1), tf.argmax(labels, 1))
        accuracy = tf.reduce_sum(tf.cast(correct_preds, tf.float32)) 
        train_op = self.optimiser.minimize(loss)
        
        self.loss=[]
        self.accuracy = []
        
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            for i in range(0, epochs):
                _, l, acc = sess.run([train_op, loss, accuracy], feed_dict = {self.X:dataset}) 
                print('Loss in epoch ' + str(i) + ' is: ' + str(l))
                self.loss.append(l)
                self.accuracy.append(acc)
            self.saver.save(sess, './try.ckpt')
                
        return self.loss, self.accuracy
    

并以以下代码运行此代码:

nn = Neural_Network(2, [20,3], [tf.nn.relu, tf.nn.relu], 0.001, optimiser = 'AdamOptimiser')
nn.create_Neural_Net(4)
nn.train_Neural_Net(dataset, labels, 1000)    

它给出的错误是:

  

ValueError:没有要保存的变量

那么这段代码有什么问题呢?我该如何解决?

0 个答案:

没有答案