2017-08-25 7 views
1

現在のstepに基づいて定義(および値)を変更する変数epsilon_nを作成する必要があります。 2つ以上のケースがあるので、tf.condを使用できないようです。私は次のことを試してみましたTesnorflow:入力引数にtf.caseを使用できません

TypeError: <lambda>() missing 1 required positional argument: 'step' 

epsilon_n = tf.case(
     pred_fn_pairs=[ 
      (tf.less(step, 3e4), fn1), 
      (tf.less(step, 6e4), fn2), 
      (tf.less(step, 1e5), fn3)], 
      default=lambda: tf.constant([1e5]), 
     exclusive=False) 

それでも私は同じエラーだろうしかし、私はこのエラーメッセージが出続ける

import tensorflow as tf 

#### 
EPSILON_DELTA_PHASE1 = 33e-4 
EPSILON_DELTA_PHASE2 = 2.5 
#### 
step = tf.placeholder(dtype=tf.float32, shape=None) 


def fn1(step): 
    return tf.constant([1.]) 

def fn2(step): 
    return tf.constant([1.+step*EPSILON_DELTA_PHASE1]) 

def fn3(step): 
    return tf.constant([1.+step*EPSILON_DELTA_PHASE2]) 

epsilon_n = tf.case(
     pred_fn_pairs=[ 
      (tf.less(step, 3e4), lambda step: fn1(step)), 
      (tf.less(step, 6e4), lambda step: fn2(step)), 
      (tf.less(step, 1e5), lambda step: fn3(step))], 
      default=lambda: tf.constant([1e5]), 
     exclusive=False) 

を:私は次のようにtf.caseを使用しようとしています。 Tensorflowのドキュメントの例では、入力可能な引数が呼び出し可能な関数に渡されない場合に重視されます。私はインターネット上のtf.caseに関する十分な情報を見つけることができませんでした!助けてください?

答えて

2

ここでは、いくつかの変更が必要です。 整合性を保つために、すべての戻り値を変数として設定できます。

# Since step is a scalar, scalar shape [() or [], not None] much be provided 
step = tf.placeholder(dtype=tf.float32, shape=()) 


def fn1(step): 
    return tf.constant([1.]) 

# Here you need to use Variable not constant, since you are modifying the value using placeholder 
def fn2(step): 
    return tf.Variable([1.+step*EPSILON_DELTA_PHASE1]) 

def fn3(step): 
    return tf.Variable([1.+step*EPSILON_DELTA_PHASE2]) 

epsilon_n = tf.case(
    pred_fn_pairs=[ 
     (tf.less(step, 3e4), lambda : fn1(step)), 
     (tf.less(step, 6e4), lambda : fn2(step)), 
     (tf.less(step, 1e5), lambda : fn3(step))], 
     default=lambda: tf.constant([1e5]), 
    exclusive=False) 
+0

固定小数のタイプミス –

関連する問題