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