Tensorflowシリーズ:tf.contrib.layers.batch_norm
tf.contrib.layers.batch_norm(
inputs,
decay=0.999,
center=True,
scale=False,
epsilon=0.001,
activation_fn=None,
param_initializers=None,
param_regularizers=None,
updates_collections=tf.GraphKeys.UPDATE_OPS,
is_training=True,
reuse=None,
variables_collections=None,
outputs_collections=None,
trainable=True,
batch_weights=None,
fused=None,
data_format=DATA_FORMAT_NHWC,
zero_debias_moving_mean=False,
scope=None,
renorm=False,
renorm_clipping=None,
renorm_decay=0.99,
adjustment=None
)
バッチ正規化。内部共変量シフトの低減によるディープネットワーク学習の高速化"
セルゲイ・イオフ、クリスチャン・セゲディ
バッチ正規化は、内部共分散を減らすことによって、ニューラルネットワークの学習を加速させます。
conv2dとfully_connectedの正規化関数として使用できる。
パラメータです。
1入力です。入力
2 decay:減衰係数。トレーニングセットの性能が良く,バリデーション/テストセットの性能が悪い場合,以下のように選択する.
小さな係数(0.9を推奨)にする。安定性を高めたい場合は、zero_debias_moving_meanをTrueに設定する。
3 中心:Trueの場合、ベータオフセットあり、Falseの場合、ベータオフセットなし
4 scale: Trueの場合、ガンマを乗じる。Falseの場合、ガンマは使用されない。次のレイヤーが線形である場合(nn.reluなど)、スケーリングは次のレイヤーで行うことができるので
ので、レイヤーを無効にすることができます。
5 イプシロン:ゼロによる除算を回避する
6 activation_fn: 活性化用、デフォルトは線形活性化関数
7 param_initializers : ベータ、ガンマ、移動平均、移動分散に関する最適化初期化処理
8 param_regularizers : ベータおよびガンマ正則化の最適化
9 updates_collections : update_ops は train_op で実行される必要がある。Noneの場合、制御依存性を
更新が計算されることを保証する。
10 is_training: このレイヤーがトレーニングモードであるかどうか。学習モードでは、与えられた指数移動平均を用いて、移動統計量 moving_mean と moving_variance を蓄積する。
decay. when it is not in training mode, then it will use the values moving_mean and moving_variance.
11 scope: optional scope variable_scope
Note: During training, moving_mean and moving_variance need to be updated. by default, the update operation is put into
tf.GraphKeys.UPDATE_OPS, so you need to add them as dependencies on train_op
. Example.
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS) with tf.control_dependencies(update_ops): train_op = optimizer.minimize(loss)
It is possible to set updates_collections = None to force updates, but this may result in a loss of speed, especially in a distributed setup.
Returns the output of this operation
API: https://tensorflow.google.cn/api_docs/python/tf/contrib/layers/batch_norm
ministの例です。
import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# define our typical fully-connected + batch normalization + nonlinearity set-up
def dense(x, size, scope):
return tf.contrib.layers.fully_connected(x, size,
activation_fn=None,
scope=scope)
def dense_batch_relu(x, phase, scope):
with tf.variable_scope(scope):
h1 = tf.contrib.layers.fully_connected(x, 100,
activation_fn=None,
scope='dense')
h2 = tf.contrib.layers.batch_norm(h1,
center=True, scale=True,
is_training=phase,
scope='bn')
return tf.nn.relu(h2, 'relu')
tf.reset_default_graph()
x = tf.placeholder('float32', (None, 784), name='x')
y = tf.placeholder('float32', (None, 10), name='y')
phase = tf.placeholder(tf.bool, name='phase')
h1 = dense_batch_relu(x, phase,'layer1')
h2 = dense_batch_relu(h1, phase, 'layer2')
logits = dense(h2, 10, 'logits')
with tf.name_scope('accuracy'):
accuracy = tf.reduce_mean(tf.cast(
tf.equal(tf.argmax(y, 1), tf.argmax(logits, 1)),
'float32'))
with tf.name_scope('loss'):
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))
def train(mnist):
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
# Ensures that we execute the update_ops before performing the train_step
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
history = []
iterep = 500
for i in range(iterep * 30):
x_train, y_train = mnist.train.next_batch(100)
sess.run(train_step,
feed_dict={'x:0': x_train,
'y:0': y_train,
'phase:0': 1})
if (i + 1) % iterep == 0:
epoch = (i + 1)/iterep
tr = sess.run([loss, accuracy],
feed_dict={'x:0': mnist.train.images,
'y:0': mnist.train.labels,
'phase:0': 1})
t = sess.run([loss, accuracy],
feed_dict={'x:0': mnist.test.images,
'y:0': mnist.test.labels,
'phase:0': 0})
history += [[epoch] + tr + t]
print(history[-1])
return history
def main(argv=None):
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
train(mnist)
if __name__ == '__main__':
tf.app.run()
関連
-
[解決済み】モジュール 'tensorflow'に属性 'contrib' がない。
-
徹底的な解決。お使いのCPUは、このTensorFlowバイナリが使用するためにコンパイルされていない命令をサポートしています。AVX2
-
[解決済み] なぜtf.name_scope()を使うのか?
-
[解決済み] Tensorflowにおけるglobal_stepの意味とは?
-
デバイスから 18.41M (19300352 bytes) の割り当てに失敗しました。CUDA_ERROR_OUT_OF_MEMORY
-
AttributeError: 'list' オブジェクトには 'value' という属性がありません。
-
テンソルフロー学習ノート(II): テンソル変換
-
tensorflow 学習メモ (IX): tf.shape()とtensor.get_shape()
-
tf.variable, tf.get_variable, tf.variable_scope, tf.name_scope の類似点と相違点を理解する。
-
tf.convert_to_tensorを使用したときの値のエラーの解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] tensorboard: コマンドが見つかりません。
-
[解決済み] tf.int64をtf.float32に変換する方法は?
-
[解決済み] tensorflowの.pbと.pbtxtの違い?
-
[解決済み] 入力パイプラインは、keras.utils.Sequenceオブジェクトまたはtf.data.Datasetを使用しますか?
-
ImportError: cannot import name 'get_config' How to solve this problem?
-
Tensorflow Error 1 AttributeError: __enter__
-
tensorflow 2.0, ニューラルネットワークス: Sinusoidal Fitting, AttributeError: モジュール 'tensorflow' has no attribute 'placeholder' エラー
-
AttributeError: モジュール tensorflow には属性プレースホルダーがありません。
-
AttributeError: モジュール 'tensorflow' には 'placeholder' という属性がありません。
-
モジュール 'matplotlib' には、解決すべき属性 'configure' がありません。