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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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