TensorFlow中的权重和偏置初始化

我在进行电力负荷预测,需要初始化权重和偏置。我已经使用不同的算法计算并保存了权重和偏置到一个文件中。我希望使用这个文件来启动我的训练,使用这些权重和偏置。

以下是我想要更新的代码。

#RNN设计
tf.reset_default_graph()
inputs = 1  #输入向量大小
hidden = 100    
output = 1  #输出向量大小
X = tf.placeholder(tf.float32, [None, num_periods, inputs])
y = tf.placeholder(tf.float32, [None, num_periods, output])
basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=hidden, activation=tf.nn.relu)
rnn_output, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32)
learning_rate = 0.001   #小的学习率以避免超过最小值
stacked_rnn_output = tf.reshape(rnn_output, [-1, hidden])           #将形式改为张量
stacked_outputs = tf.layers.dense(stacked_rnn_output, output)        #指定层的类型(密集层)
outputs = tf.reshape(stacked_outputs, [-1, num_periods, output])          #结果的形状
loss = tf.reduce_mean(tf.square(outputs - y))    #定义评估模型质量的成本函数
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)          #梯度下降方法
training_op = optimizer.minimize(loss)          #训练应用成本函数的结果                                 
init = tf.global_variables_initializer()           #初始化所有变量
epochs = 1000     #迭代或训练周期的数量,包括前馈和反向传播
mape = []
def mean_absolute_percentage_error(y_true, y_pred):     
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
y_pred = {'NSW': [], 'QLD': [], 'SA': [], 'TAS': [], 'VIC': []}
for st in state.values():    
    print("State: ", st, end='\n')    
    with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
        init.run()
        for ep in range(epochs):            
            sess.run(training_op, feed_dict={X: x_batches[st], y: y_batches[st]})
            if ep % 100 == 0:                
                mse = loss.eval(feed_dict={X: x_batches[st], y: y_batches[st]})
                print(ep, "MSE:", mse)
        y_pred[st] = sess.run(outputs, feed_dict={X: x_batches_test[st]})
    print("\n")

我使用以下算法找到权重和偏置,并将其保存为weightsbiases的列表形式。

class network:    
    def set_weight_bias(self, a):        
        lIt = 0        
        rIt = 0        
        self.weights = []        
        self.biases = []        
        for x,y in zip(self.sizes[1:], self.sizes[:-1]):            
            rIt += x*y            
            self.weights.append(a[lIt:rIt].reshape((x,y)))            
            lIt = rIt        
        for x in self.sizes[1:]:            
            rIt += x            
            self.biases.append(a[lIt:rIt].reshape((x,1)))            
            lIt = rIt    
    ...    
    """    
    布谷鸟搜索优化    
    """    
    def objectiveFunction(self,x):        
        self.set_weight_bias(x)        
        y_prime = self.feedforward(self.input)        
        return sum(abs(u-v) for u,v in zip(y_prime, self.output))/x.shape[0]    
    def cso(self, n, x, y, function, lb, ub, dimension, iteration, pa=0.25,                 
           nest=100):        
        """        
        :param n: 代理数量        
        :param function: 测试函数        
        :param lb: 绘图轴的下限        
        :param ub: 绘图轴的上限        
        :param dimension: 空间维度        
        :param iteration: 迭代次数        
        :param pa: 布谷鸟蛋被发现的概率(默认值为0.25)        
        :param nest: 巢的数量(默认值为100)        
        """        
        ...

我希望使用自定义的权重和偏置来开始我的训练,而不是使用TensorFlow随机分配的权重和偏置。如何在TensorFlow中实现这一点?


回答:

您是想要为RNN单元还是为Dense层设置权重?如果是为RNN单元,您应该可以使用set_weights方法来设置权重。

如果是为Dense层,您应该可以分配一个Variable,并使用initializer参数传递您的权重(以及另一个用于偏置)。然后,当您调用layers.dense时,您可以将这两个变量张量分别传递给kernel_initializerbias_initializer,用于权重和偏置。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注