Python Tensorflow:什么是;输入“平均值”;及;输入“U标准”;在tensorflow示例中的label_image.py中

Python Tensorflow:什么是;输入“平均值”;及;输入“U标准”;在tensorflow示例中的label_image.py中,python,tensorflow,deep-learning,classification,Python,Tensorflow,Deep Learning,Classification,我正在使用Windows7。 我用官方再培训的例子培训了一个mobilenet 我运行了如下命令: python ../tensorflow-master/tensorflow/examples/image_retraining/retrain.py --image_dir test/ --learning_rate=0.0001 --testing_percentage=20 --validation_percentage=20 --train_batch_size=32 --validat

我正在使用Windows7。 我用官方再培训的例子培训了一个mobilenet

我运行了如下命令:

python ../tensorflow-master/tensorflow/examples/image_retraining/retrain.py --image_dir test/ --learning_rate=0.0001 --testing_percentage=20 --validation_percentage=20 --train_batch_size=32 --validation_batch_size=-1 --flip_left_right True --random_scale=30 --random_brightness=30 --eval_step_interval=100 --how_many_training_steps=2000 --architecture mobilenet_0.25_128
我得到了经过训练的图形和标签文件“output_graph.pb”和“output_labels.txt”

现在,我想使用上面生成的图执行分类,所以我使用了tensorflow github中提供的标签_image.py

我运行以下命令:

python ../tensorflow-master/tensorflow/examples/label_image/label_image.py --graph=output_graph.pb --labels=output_labels.txt --image=test.jpg --input_layer=input --output_layer=final_result --input_mean=128 --input_std=128 --input_width=128 --input_height=128
图像“test.jpg”可以分类

但是,当我对“input_mean”和“input_std”使用不同的值时,结果会发生变化


“输入”和“输入标准”是什么意思?如何为这两个参数获得正确的值?

这两个变量用于规范化数据集,因为我们观察到这样做的结果有所改善。
input_mean
是数据集每个通道的平均值,
input_std
是相关的标准偏差。当您控制在网络中传递的数据集时,您应该能够计算平均值和std

正常化意味着两件事:

  • 将数据置于相同的比例(缩放)
  • 围绕一个点平衡数据(居中(在本例中为0左右))
关于我们为什么这样做,你可以在下面的答案中读到:

减去数据集的平均值可以“居中”数据。 此外,理想情况下,您希望除以该值的sttdev 如果要规格化每个特征值,也可以使用特征或像素 到z分数

我们之所以做这两件事是因为 通过训练我们的网络,我们将增加(重量)和 增加(偏差)这些初始输入以引起激活 然后我们用梯度反投影来训练模型

在这个过程中,我们希望每个功能都有一个相似的范围 我们的梯度不会失控(而且我们只需要一个梯度) 全球学习率乘数

编辑:举个例子 假设您的图像是一个3像素的简单图像:

img = [[[1,2,3],[4,5,6],[7,8,9]]]
您可以轻松计算每个通道的平均值

mean = [4,5,6]
每个频道的std也同样容易:

std = [2.45,2.45,2.45]
由于tensorflow将执行元素减法,然后执行元素除法,因此您将分别规范化图像的每个通道


在代码中,它们似乎添加了一个维度以符合tf.image函数。因为第一个维度是批处理维度,所以应该在数组前面加上0。(
[0,4,5,6]

这两个变量用于规范化数据集,因为我们观察到这样做的结果有所改善。
input_mean
是数据集每个通道的平均值,
input_std
是相关的标准偏差。当您控制在网络中传递的数据集时,您应该能够计算平均值和std

正常化意味着两件事:

  • 将数据置于相同的比例(缩放)
  • 围绕一个点平衡数据(居中(在本例中为0左右))
关于我们为什么这样做,你可以在下面的答案中读到:

减去数据集的平均值可以“居中”数据。 此外,理想情况下,您希望除以该值的sttdev 如果要规格化每个特征值,也可以使用特征或像素 到z分数

我们之所以做这两件事是因为 通过训练我们的网络,我们将增加(重量)和 增加(偏差)这些初始输入以引起激活 然后我们用梯度反投影来训练模型

在这个过程中,我们希望每个功能都有一个相似的范围 我们的梯度不会失控(而且我们只需要一个梯度) 全球学习率乘数

编辑:举个例子 假设您的图像是一个3像素的简单图像:

img = [[[1,2,3],[4,5,6],[7,8,9]]]
您可以轻松计算每个通道的平均值

mean = [4,5,6]
每个频道的std也同样容易:

std = [2.45,2.45,2.45]
由于tensorflow将执行元素减法,然后执行元素除法,因此您将分别规范化图像的每个通道


在代码中,它们似乎添加了一个维度以符合tf.image函数。因为第一个维度是批处理维度,所以应该在数组前面加上0。(
[0,4,5,6]

请提供您正在使用的代码。@Lescure我添加了包含我使用的.py文件的相关链接。您应该在问题中嵌入该代码,因为该链接将来可能会更改。@Lescure我添加了label_image.py的代码,但是我没有复制retain.py的代码,因为有一个单词限制它们是由培训中的
--architecture
参数选择的参数。看起来它们都应该是
127.5
,但我没有任何解释,为什么请提供您正在使用的代码。@Lescure我添加了包含我使用过的.py文件的相关链接。您应该在问题中嵌入代码,因为链接将来可能会更改。@Lescure我添加了label_image.py的代码,但是我没有复制retain.py的代码,因为有一个单词限制它们是由培训中的
--architecture
参数选择的参数。看起来它们应该都是
127.5
,但我没有任何解释,为什么在这种情况下我必须计算所有通道的图像颜色的平均值和标准?每个通道的平均值选项将为您提供最佳结果。不是int,而是传递一个mean和std数组。我将更新我的答案以提供一个示例。这意味着在这种情况下,我必须计算所有通道的图像颜色的mean和std?每个通道的平均值选项将为您提供最佳结果。传递一个mean和std数组,而不是int。我将更新我的答案