TextLineReader
を使用してテキストファイルを読み込んだとしましょう。 Tensorflow
でこれをトレインセットとテストセットに分割する方法はありますか?何かのようなもの:
def read_my_file_format(filename_queue):
reader = tf.TextLineReader()
key, record_string = reader.read(filename_queue)
raw_features, label = tf.decode_csv(record_string)
features = some_processing(raw_features)
features_train, labels_train, features_test, labels_test = tf.train_split(features,
labels,
frac=.1)
return features_train, labels_train, features_test, labels_test
次のようなものが動作するはずです:tf.split_v(tf.random_shuffle(...
Elhamが述べたように、 scikit-learn を使用してこれを簡単に行うことができます。 scikit-learnは、機械学習用のオープンソースライブラリです。パラメーターの比較、検証、選択を処理する _model_selection
_ モジュールを含むデータ準備用のツールが多数あります。
model_selection.train_test_split()
メソッドは、データをトレインセットとテストセットにランダムにパーセンテージで分割するように特別に設計されています 。
_X_train, X_test, y_train, y_test = train_test_split(features,
labels,
test_size=0.33,
random_state=42)
_
_test_size
_はテスト用に予約する割合であり、_random_state
_はランダムサンプリングをシードすることです。
私は通常、これを使用してトレーニングおよび検証データセットを提供し、真のテストデータを個別に保持します。これを行うには、_train_test_split
_を2回実行するだけで済みます。つまりデータを(Train + Validation)とTestに分割し、Train + Validationを2つの別々のテンソルに分割します。
import sklearn.model_selection as sk
X_train, X_test, y_train, y_test =
sk.train_test_split(features,labels,test_size=0.33, random_state = 42)
Tf.data.Dataset APIのマップおよびフィルター機能を使用して、なんとか素敵な結果を得ることができました。 map関数を使用して、トレーニングとテストの間でサンプルをランダムに選択します。これを行うには、各例で、一様分布からサンプルを取得し、サンプル値がレート分割を下回っているかどうかを確認します。
def split_train_test(parsed_features, train_rate):
parsed_features['is_train'] = tf.gather(tf.random_uniform([1], maxval=100, dtype=tf.int32) < tf.cast(train_rate * 100, tf.int32), 0)
return parsed_features
def grab_train_examples(parsed_features):
return parsed_features['is_train']
def grab_test_examples(parsed_features):
return ~parsed_features['is_train']