問題タブ [gpflow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
226 参照

gpflow - GPFlow-2.0 - default_float と尤度分散の問題

float64 で gpflow (2.0rc) を使用しようとしていますが、単純な例でさえ機能させるのに苦労していました。以下を使用して gpflow を構成します。

私はGPRを使用しています:

実際、要約を出力すると、両方のパラメーターの dtype が float64 になります。ただし、このモデルで予測しようとすると、エラーが発生します。

デバッグ セッションにより、gpr.py の次の行 (88 行目) にたどり着きました。

これにより、上記のようにブローアップを引き起こす dtype float32 を持つマトリックスが作成されます。問題は、尤度分散の設定方法にあるようです。

この問題を示す完全な Python スクリプトを次に示します。

0 投票する
0 に答える
170 参照

python - gpflow model.elbo が KeyError と NotImplementedError をスローする

X_train の形状 (140,1433) と y_train の形状 (140,) を使用して、gpflow で SVGP モデルをトレーニングしようとしています。Dispatcher.py から KeyError を取得しましたが、エラー メッセージでは、コードのどの部分がそのファイルを呼び出したかが特定されていません。また、エラー メッセージの残りの部分が何を意味するのかわかりません。関連する完全なコードと完全なエラー メッセージをコピーします。

次のエラー メッセージが表示されます。

KeyError トレースバック (最新の呼び出しが最後) ~\Anaconda3\envs\tf_gpf_env\lib\site-packages\multipledispatch\dispatcher.py in call (self, *args, **kwargs) 268 try: --> 269 func = self. _cache[types] KeyError を除く 270:

キーエラー: (, , )

上記の例外の処理中に、別の例外が発生しました:

NotImplementedError 範囲 (200) のエポックに対する 1 のトレースバック (最新の呼び出しが最後): ----> 2 elbo = -training_step(X_train, y_train, optimizer, gprocess) 3 elbo = elbo.numpy() 4 5 acc = evaluate (idx_test、node_labels[idx_test]、gprocess)

training_step(X_train, y_train, optimizer, gprocess) 15 tape.watch(gprocess.trainable_variables) 16 data=(X_train, y_train) ---> 17 目的 = -gprocess.elbo(データ) 18 19 #objective = -gprocess. elbo(X_train, y_train)

c:\users\asus\downloads\gpflow-develop\gpflow-develop\gpflow\models\svgp.py in elbo(self, data) 152 対数限界尤度の証拠下限 (ELBO) を返します。153 """ --> 154 return self.log_marginal_likelihood(data) 155 156 def predict_f(self, Xnew: tf.Tensor, full_cov=False, full_output_cov=False) -> tf.Tensor:

c:\users\asus\downloads\gpflow-develop\gpflow-develop\gpflow\models\model.py in log_marginal_likelihood(self, *args, **kwargs) 43 44 def log_marginal_likelihood(self, *args, **kwargs) -> tf.Tensor: ---> 45 return self.log_likelihood(*args, **kwargs) + self.log_prior() 46 47 def log_prior(self) -> tf.Tensor:

c:\users\asus\downloads\gpflow-develop\gpflow-develop\gpflow\models\svgp.py in log_likelihood(self, data) 138 X, Y = データ 139 kl = self.prior_kl() --> 140 f_mean , f_var = self.predict_f(X, full_cov=False, full_output_cov=False) 141 var_exp = self.likelihood.variational_expectations(f_mean, f_var, Y) 142 self.num_data が None でない場合:

c:\users\asus\downloads\gpflow-develop\gpflow-develop\gpflow\models\svgp.py in predict_f(self, Xnew, full_cov, full_output_cov) 164 full_cov=full_cov, 165 white=self.whiten, --> 166 full_output_cov=full_output_cov) 167 # tf.debugging.assert_positive(var) # 本当にここでテストをパスさせるべきです 168 return mu + self.mean_function(Xnew), var

~\Anaconda3\envs\tf_gpf_env\lib\site-packages\multipledispatch\dispatcher.py in call (self, *args, **kwargs) 276 self._cache[types] = func 277 try: --> 278 return func( *args, **kwargs) 279 280 MDNotImplementedError を除く:

c:\users\asus\downloads\gpflow-develop\gpflow-develop\gpflow\conditionals\conditionals.py in _conditional(Xnew, inducing_variable, kernel, function, full_cov, full_output_cov, q_sqrt, white) 54 """ 55 Kmm = Kuu(inducing_variable, kernel,itter=default_jitter()) # [M, M] ---> 56 Kmn = Kuf(inducing_variable, kernel, Xnew) # [M, N] 57 Knn = kernel(Xnew, full=full_cov) 58 fmean、fvar = base_conditional(Kmn、

~\Anaconda3\envs\tf_gpf_env\lib\site-packages\multipledispatch\dispatcher.py in call (self, *args, **kwargs) 273 raise NotImplementedError( 274 'Could not found signature for %s: <%s>' % --> 275 (self.name, str_signature(types))) 276 self._cache[types] = func 277 試してください:

NotImplementedError: Kuf の署名が見つかりませんでした:

0 投票する
1 に答える
196 参照

gpflow - SVGP と SGPMC の実装の違い

SGPMC の論文 [1] に関する限り、事前トレーニングは SVGP とほとんど同じであるはずです。q_sqrt=Noneただし、実装 (現在の開発バージョン) は少し異なり、ディスパッチ プログラミング スタイルが原因で、すべてを理解するのに問題があります (特に の条件付きで何が起こるか)。

違いはq_mu/がその正規分布q_varで表されるようになったことです。self.V他の唯一の変更は、サンプリングに必要なため、ホワイトニングがデフォルトでオンになっていることですか?

奇妙なことに、SPGMC の確率的最適化 (まだサンプリングなし) は、SVGP クラスよりも私の特定のデータでかなりうまく機能しているように見えます。基本的に同じはずなので、少し混乱しました。

[1]ヘンスマン、ジェイムズ他 「変分的にまばらなガウス プロセスの MCMC。」神経情報処理システムの進歩。2015年。

Edit2 :現在の開発ブランチでは、(負の) training_objective が基本的に: VariationalExp + self.log_prior_density()で構成されているのに対し、SVGP ELBO はVariationalExp - KL(q(u)|p(u)).

self.log_prior_density()明らかにすべての以前の密度を追加します。したがって、トレーニング目標は、SGPMC 論文の式 (7) (白色化された最適変分分布) のようになります。

したがって、事後変数の最適な変分近似を最適化するp(f*,f, u, θ | y)ことで、誘導点の MAP 推定を取得できますか?