2017-03-28 14 views
2

私はウェブから多くの顔画像をダウンロードしました。 Tensorflowを学ぶために、私はこれらの画像を単一の隠れた層で完全に接続された単純なニューラルネットワークに送りたいと思っています。 hereにサンプルコードがあります。自分のデータセットを持つニューラルネットワーク

私は初心者であるため、ダウンロードした画像を使用してネットワークをトレーニング、評価、テストする方法はわかりません。コードの所有者は、 '.mat'ファイルと.pklファイルを使用しました。私は彼が訓練とテストセットをどのように編成したのか分かりません。

私の画像でコードを実行するには、 画像をトレーニングフォルダ、テストフォルダ、検証フォルダに分割し、各フォルダをマットファイルに変換する必要がありますか?どのように訓練のためのラベルを提供するつもりですか?

さらに、なぜ彼が '.pkl'ファイルを使用したのか分かりません。

このコードを変更して、画像データセットでテスト、トレーニング、および検証セット分類のパフォーマンスを確認したいと思います。

それは簡単な質問かもしれませんが、それは私にとっては出発段階であることが重要です。わかってくれてありがとう。

答えて

1

まず、.matファイルやピクルスを使用する必要はありません。 Tensorflowはnumpy arrayを期待しています。

たとえば、10個のクラスに属するサイズ28x28(= 784個)の画像が70000個あるとします。画像を分類するために単純なフィードフォワードニューラルネットワークを訓練したいと仮定しましょう。

最初のステップは、列車とテストの間で画像を分割することです(また、検証も行いますが、簡単にするためにこれを入れておきます)。例のために、をランダムに 60000の画像をトレーニングセットに、10000をテストセットとして選択したとします。

第2のステップは、データが適切なフォーマットになっていることを確認することです。ここでは、訓練が画像のための形状num32の配列(60000, 784)とラベルのための形の(60000, 10)(あなたがクラスを表現するためにワンホットエンコーディングを使用するならば)のもう1つを構成したいと思います。テストセットについては、画像の形状は(10000, 784)、ラベルの形状は(10000, 10)です。

これらの大型配列を取得したら、placeholdersを定義して、トレーニングと評価中にネットワークにデータを供給できるようにする必要があります。

images = tf.placeholder(tf.float32, shape=[None, 784]) 
labels = tf.placeholder(tf.int64, shape=[None, 10]) 

ここNoneは、あなたが好きなあなたがいる限り、あなたがnumpyの配列は、形状(anything, 784)であるように、すなわち、できるだけ多くの画像を任意のサイズのバッチを供給できることを意味します。

第3のステップは、モデルと損失関数とオプティマイザを定義することにあります。

第4ステップは、上で作成したプレースホルダを使用してランダムなデータのバッチをネットワークに送り込むことでネットワークをトレーニングします。あなたのネットワークが訓練されているので、訓練の損失/正確さ、そしてテストの損失/正確さのようなパフォーマンスを定期的に印刷することができます。

完全で非常に単純な例hereがあります。

+0

@BiBiにお返事ありがとうございます。あなたの答えは非常にはっきりしていますが、私は1つのことを理解しませんでしたトレーニング画像にどのようにラベルを付けるのですか? 1つずつ、または他の方法で?ラベリングの簡単な例や説明はありますか? –

+0

ラベルの取得は最も面倒な作業の1つです。 MNISTの例では、ラベルは手動で取得され、誰でも自由にダウンロードできます。公開されているデータセットを使用する場合は、ほとんどの場合ラベルが付いている可能性があります。しかし、独自のデータセット(独自のイメージなど)を作成する場合は、手動でラベルを取得する必要があります(教師付き学習をしたいと仮定して)。 – BiBi

関連する問題