2016-06-22 10 views
2

私はTensorflowのCIFAR-10チュートリアルを実行していましたが、私の変数宣言は動作しません。変数の単純な初期化ができません - 'データ型が理解できません'

biases = tf.get_variable('biases', [64], tf.constant_initializer(0.0)) 

がエラーを与える:簡単なようであっても、何か

私が間違っているかを調べるために必死だ
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-23-86228512ca30> in <module>() 
----> 1 biases = tf.get_variable('biases', [64], tf.constant_initializer(0.0)) 

/home/mmm/programs/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.pyc in get_variable(name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, validate_shape) 
    730  initializer=initializer, regularizer=regularizer, trainable=trainable, 
    731  collections=collections, caching_device=caching_device, 
--> 732  partitioner=partitioner, validate_shape=validate_shape) 
    733 
    734 

/home/mmm/programs/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.pyc in get_variable(self, var_store, name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, validate_shape) 
    594   regularizer=regularizer, reuse=self.reuse, trainable=trainable, 
    595   collections=collections, caching_device=caching_device, 
--> 596   partitioner=partitioner, validate_shape=validate_shape) 
    597 
    598 def _get_partitioned_variable(

/home/mmm/programs/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.pyc in get_variable(self, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape) 
    159   initializer=initializer, regularizer=regularizer, reuse=reuse, 
    160   trainable=trainable, collections=collections, 
--> 161   caching_device=caching_device, validate_shape=validate_shape) 
    162 
    163 def _get_partitioned_variable(

/home/mmm/programs/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.pyc in _get_single_variable(self, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, validate_shape) 
    423 
    424  should_check = reuse is not None 
--> 425  dtype = dtypes.as_dtype(dtype) 
    426  shape = tensor_shape.as_shape(shape) 
    427 

/home/mmm/programs/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/dtypes.pyc in as_dtype(type_value) 
    534 
    535 for key, val in _NP_TO_TF: 
--> 536  if key == type_value: 
    537  return val 
    538 

TypeError: data type not understood 

、それは間違っていました。

ありがとうございます!

+0

ドキュメントを確認したかどうか不明 - ここに投稿する前に、これが最初のことだったはずです。コードを 'biases = tf.get_variable( 'biases'、[64]、initializer = tf.constant_initializer(0.0))に変更してください。 – shekkizh

+0

私は文書をチェックしました。私はpythonには新しく、bradden_​​grossが修正を指摘するまでキーワードの引数を使う必要性を知らなかった。 – gwtw14

+0

@ gwtw14私はこれも私にとって本当に混乱していることに同意します。このチュートリアルでは、例のように渡す必要があることを示唆しているようですが、実際には引数の名前を明示的に指定する必要があります。それは迷惑だった。しかし、質問をしてくれてありがとう。 –

答えて

2

私はこのチュートリアルに慣れていませんが、定数を生成するイニシャライザを返すデータ型としてtf.constant_initializer(0.0)を提供したようです。 tf.get_variable()の3番目のパラメータは、変数のデータ型でなければなりません。これはバイアス変数のために通常tf.float32やtf.float64のようなものです。

+0

ありがとうございます!私はPythonには新しいので、キーワード引数と位置引数の区別/必要性があることを認識していませんでした。 – gwtw14

0

ドキュメントによっても私の心配はありません。私は将来の読者のためにもっと明白になりたいです。

tutorialは多分ちょうどうまくいく3つの事を渡すの提案を行いました

`tf.get_variable(<name>, <shape>, <initializer>)`: Creates or returns a variable with a given name. 

を持っています。違う。キーワードの引数を明示する必要があります。だから、以下は動作しません。

def get_mdl_get_var(x): 
    # variables for parameters 
    W = tf.get_variable('W', [784, 10], tf.random_normal_initializer(mean=0.0,stddev=0.1)) 
    b = tf.get_variable('b', [10], tf.constant_initializer(value=0.1)) 
    Wx_b = tf.matmul(x, W)+b 
    y = tf.nn.softmax(Wx_b) 
    return y 

をしかし、次のコードが機能するようになりました:

def get_mdl_get_var(x): 
    # variables for parameters 
    W = tf.get_variable(name='W', shape=[784, 10], initializer=tf.random_normal_initializer(mean=0.0,stddev=0.1)) 
    b = tf.get_variable(name='b', shape=[10], initializer=tf.constant_initializer(value=0.1)) 
    Wx_b = tf.matmul(x, W)+b 
    y = tf.nn.softmax(Wx_b) 
    return y 

はそれが役に立てば幸い。

関連する問題