Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有tensorflow方法提取/保存用于标准化的均值和标准差?_Python_Tensorflow_Neural Network_Normalization - Fatal编程技术网

Python 是否有tensorflow方法提取/保存用于标准化的均值和标准差?

Python 是否有tensorflow方法提取/保存用于标准化的均值和标准差?,python,tensorflow,neural-network,normalization,Python,Tensorflow,Neural Network,Normalization,我正在使用data\u norm=tf.nn.l2\u normalize(data,0)规范化我的输入训练数据 数据的形状为[无,4]。每列都是一个功能。可能是这样的: data = [[-3., 0.2, 1.6, 0.5], [3.6, 1.5, -1.9, 0.71], ...] 我理解,给定训练集中的标准化,测试集也应该标准化,但是使用std和训练集中的平均值。(我假设这也适用于实际使用NN期间,即输入应在输入NN之前使用训练集mean,std)进行

我正在使用
data\u norm=tf.nn.l2\u normalize(data,0)
规范化我的输入训练数据

数据的形状为
[无,4]
。每列都是一个功能。可能是这样的:

data = [[-3., 0.2, 1.6, 0.5], 
        [3.6, 1.5, -1.9, 0.71], 
       ...]
我理解,给定训练集中的标准化,测试集也应该标准化,但是使用
std
训练集中的
平均值
。(我假设这也适用于实际使用NN期间,即输入应在输入NN之前使用训练集
mean
std
)进行规范化)

是否有方法从该函数中提取/保存用于标准化的
平均值
标准值
,以便我可以使用用于标准化训练数据的相同平均值,标准值来标准化我的测试集?
我知道如何使用
saver.save(sess,“checkpoints/”+save_id)
保存权重等。有没有办法保存/加载std,意思是这样的?

tf.nn.l2\u规范化
使用输入数据的实时平均值,您不能使用此函数来使用训练数据
mean
std

注意:由于您正试图规范化输入数据,您可以预先计算全局(训练数据集)
mean
std
,并编写自己的函数进行规范化。

来自:

对于dim=0的一维张量,计算

output = x / sqrt(max(sum(x**2), epsilon))
ε默认为1e-12,或10默认为-12

因此,您可以对测试数据应用相同的函数

干杯


-maashu

我不是tensorflow方面的专家,但我很高兴与大家分享我的经验。在开始培训课程之前,我增加了两个变量:

train_mean = tf.Variable(np.mean(X_train), name='train_mean', dtype=tf.float64)
train_std = tf.Variable(np.std(X_train), name='train_std', dtype=tf.float64)

# initialize other variables here

with tf.session() as sess:
    sess.run(init)

    # normalize data
    train_mean_py = sess.run(train_mean)
    train_std_py = sess.run(train_std)
    X_train = (X_train - train_mean_py) / train_std_py
    X_test = (X_test - train_mean_py) / train_std_py

    # do training

    # save model
当我稍后在另一个脚本中恢复模型时,我会执行以下操作

# define the variables that have to be later recovered
train_mean = tf.Variable(0., name='train_mean', dtype=tf.float64)
train_std = tf.Variable(0., name='train_std', dtype=tf.float64)


with tf.Session() as sess:
    sess.run(init)

    saver.restore(sess, "./trained_models/{0}.ckpt".format(model_name))

    # normalize data
    train_mean_py = sess.run(train_mean)
    train_std_py = sess.run(train_std)
    X_test = (X_test - train_mean_py) / train_std_py

与常规平均值相比,“实时”平均值是什么?因为它是在运行期间从函数的输入数据计算出来的,而不是从任何其他常数还原出来的。你也可以假设它是正则平均数。
# define the variables that have to be later recovered
train_mean = tf.Variable(0., name='train_mean', dtype=tf.float64)
train_std = tf.Variable(0., name='train_std', dtype=tf.float64)


with tf.Session() as sess:
    sess.run(init)

    saver.restore(sess, "./trained_models/{0}.ckpt".format(model_name))

    # normalize data
    train_mean_py = sess.run(train_mean)
    train_std_py = sess.run(train_std)
    X_test = (X_test - train_mean_py) / train_std_py