2017-05-26 3 views
9

何ヶ月も前にTensorFlowのtf.contrib.learn.DNNRegressor APIを使用しました。私はここ数ヶ月間TensorFlowの開発に追いつかなかった。今、私はリグレッサーを再び使用したいプロジェクトを持っていますが、DNNRegressorが提供する実際のモデルをより詳細に制御できます。私が見る限り、これはmodel_fnパラメータを使用してEstimator APIによってサポートされています。TensorFlowのtf.estimator.Estimatorとtf.contrib.learn.Estimatorの違い

しかしTensorFlow APIの2 Estimator秒あります

  • tf.contrib.learn.Estimator
  • tf.estimator.Estimator

の両方が同様のAPIを提供し、それらの使用にもかかわらず、わずかに異なっています。なぜ2つの異なる実装があり、どちらを優先するのか?

残念ながら、私はTensorFlowのドキュメントまたは両方のいずれかを使用する際のガイドに違いは見つかりません。実際には、TensorFlowチュートリアルでは、インタフェースの一部が(xyパラメータの代わりに、input_fnパラメータなどの代わりに)明らかに変更されているため、多くの警告が生成されていました。

答えて

6

私はあなたを助けるかもしれないいくつかの教育を受けた推測を持って同じことを疑問に思ったし、決定的な答えを与えることはできませんが、しかし

tf.estimator.Estimatorが一緒にtf.estimator.EstimatorSpecを返すモデル関数で最新のものであると思わこれは新しい例で使用され、新しいコードで使用される例です。

私の推測では、tf.contrib.learn.Estimatorは早いプロトタイプで、tf.estimator.Estimatorに置き換えられました。ドキュメントによると、tf.contribのすべてはいつでも変更される不安定なAPIで、tf.estimatorモジュールはtf.contrib.learnモジュールから「進化した」安定したAPIであるようです。筆者は、tf.contrib.learn.Estimatorを非推奨とし、まだ削除されていないので、既存のコードが壊れないようにすることを忘れてしまったと思います。

0

私は同じ質問をしました。

tf.estimator.Estimatorは高水準のインターフェイスであり、tf.contrib.learn.Estimatorは高水準のインターフェイスではないと言われていますが(実際はそうですが)、推薦された使用法です。

Christophが言及したように、tf.contribは不安定なので、tf.contrib.learn.Estimatorは変更に脆弱です。それは0.xバージョンから1.1バージョンに変更され、2016.12で再び変更されました。問題は、それらの使い方が異なっていることです。 tf.contrib.learn.SKCompatを使用してtf.contrib.learn.Estimatorをラップし、tf.estimator.Estimatorを使用して同じことをすることはできません。エラーメッセージをチェックすると、model_fnの要件とパラメータが異なります。

結論として、この2台の見積もりは別物です!

はとにかく、私はtf.estimatorはクリストフの答えに追加するには、彼らはこのことについて非常に深刻であることを意味彼らのチュートリアルページ...

1

であるため、TFドキュメントは、このトピックに非常に悪いやったと思います。

これらのパッケージの区別は特にTensorflowのDevサミット2017 by Martin Wickeで言及されています:

コアとcontribの間の区別は変更されません コアなものに実際にあります。物はリリース2.0まで下位互換性があり、誰もそのことについて今考えていません。

コアに何かがある場合は安定しているので、それを使用してください。あなたがcontribに何かを持っているならば、APIはあなたの必要に応じて変わるかもしれません。 あなたはそれを使いたいかもしれません。

tf.contribパッケージは「実験的」または「初期プレビュー」と考えることができます。すでにtf.estimatortf.contribのクラスの場合はtf.contribクラスが自動的に非推奨になり(ドキュメントに明示されていなくても)、次のリリースで削除することができるので、tf.estimatorバージョンを確実に使用する必要があります。

tensorflow 1.4の時点ではクラスを "卒業" のリストが含まれています:Estimator DNNClassifierDNNRegressorLinearClassifierLinearRegressorDNNLinearCombinedClassifierDNNLinearCombinedRegressorを。これらはtf.estimatorに移植する必要があります。

3

今のドキュメントで、この明示的なステートメントがあります:それはコードで非推奨とマークされていないいくつかの理由

Note: TensorFlow also includes a deprecated Estimator class at tf.contrib.learn.Estimator, which you should not use.

https://www.tensorflow.org/programmers_guide/estimators

enter image description here

関連する問題