ネットワーク上のいくつかの変数を NumPy 値で初期化したいと考えました。例として以下を検討してください。
init=np.random.rand(1,2)
tf.get_variable('var_name',initializer=init)
そうするとエラーが発生します:
ValueError: Shape of a new variable (var_name) must be fully defined, but instead was <unknown>.
なぜそのエラーが発生するのでしょうか?
これを修正するために、次のことを試しました:
tf.get_variable('var_name',initializer=init, shape=[1,2])
さらに奇妙なエラーが発生しました:
TypeError: 'numpy.ndarray' object is not callable
読んでみましたドキュメントと例しかし、それは実際には役に立ちませんでした。
TensorFlow の get_variable メソッドを使用して、numpy 配列で変数を初期化することはできないのでしょうか?
ベストアンサー1
定数 NumPy 配列を定数に変換すると、次のように動作しますTensor
。
init = tf.constant(np.random.rand(1, 2))
tf.get_variable('var_name', initializer=init)
のドキュメントはget_variable
確かに少し不足しています。参考までに、initializer
引数は TensorFlowTensor
オブジェクト (この場合は値を呼び出すことによって構築できます)、または と、返される値の形状とデータ型の 2 つの引数を取る「呼び出し可能」tf.constant
である必要があります。この場合も、「呼び出し可能」メカニズムを使用する場合は、次のように記述できます。numpy
shape
dtype
init = lambda shape, dtype: np.random.rand(*shape)
tf.get_variable('var_name', initializer=init, shape=[1, 2])