私は深く学ぶのが初めてです。そして、私はちょうどTensorflowでCNNを実装し、CIFAR-10(オブジェクト認識ベンチマーク、画像はの10種類の異なるクラスにあります)で試してみました。私のCNNはなぜ学ばないのですか?
訓練の過程で、訓練の損失は最初(100000から3まで)に急速に減少しましたが、それは常に(これはおよそlog(1/10)です)で立ち往生しました。私はクロスエントロピーを損失関数として使用しているので、2.30の損失は私のモデルが約10%の精度を持っていることを意味します - ランダムに推測すると正確に同じです(モデルの実際の出力を確認しました各クラス)。
私のモデルがオーバーフィットするほど「強く」ないので、モデルのサイズを増やそうとしました。しかし、モデルのサイズをどのように増減させても、トレーニングの損失は常に約2.30で減少しなくなることが判明しました。
私のモデルはMNIST(手書き数字認識)のような簡単な作業のために正しく実装されていると確信しています。だから私は本当に問題が何であるか疑問に思います。どうもありがとう。
CONV1:relu有する畳み込み層
pooling1:最大プーリング層
FC1:reluと完全に接続された層
出力:ソフトマックスと完全に接続された層
コード:
nn = NeuralNetwork(optimizer=Adam(0.001), log_dir='logs')
nn.add(Input('input', [32, 32, 3],))
nn.add(Convolution2D(name='conv1', filter_height=3, filter_width=3,
n_output_channels=256, activation_fn='relu'))
nn.add(Pooling2D('pooling1', mode='max', pool_shape=(3, 3), padding='SAME'))
nn.add(Convolution2D(name='conv2', filter_height=3, filter_width=3,
n_output_channels=128, activation_fn='relu'))
nn.add(Pooling2D('pooling2', mode='max', pool_shape=(3, 3), padding='SAME'))
nn.add(FullyConnected('fc1', 384, activation_fn='relu',
weight_init=truncated_normal(), bias_init=constant(0.1)))
nn.add(FullyConnected('fc2', 192, activation_fn='relu',
weight_init=truncated_normal(), bias_init=constant(0.1)))
nn.add(Output(loss_fn='sparse_softmax_cross_entropy', output_fn='softmax',
name='output', target_shape=[], target_dtype=tf.int64,
output_shape=10))
nn.build()
編集:私が述べたように
。私はより多くのレイヤーを追加してモデルの複雑さを増やそうとしましたが、ノーマルレイヤー(conv1、pooling1、conv2、pooling2、fc1、fc2、softmax)とホワイトニングのような前処理がないことを除けばチュートリアルでほぼ試しました。わかりやすくするために、私のパフォーマンスを86%から10%にまで深刻なものにすることはないでしょう。
私が助けてくれるかもしれないもう一つの手がかりは、レイヤーfc1
の出力が非常にまばらであることです(ほぼ99%の要素はゼロです)。私はReLUを起動機能として使用しているので、fc1のユニットはほとんどが死んでいるということです。私はそれで何ができるの?
ラベルを2回確認しましたか?データをシャッフルしている間に何か問題が起きましたか? – natschz
MNISTにはより単純な機能があったので、1つのコンバレイヤーで十分でした。 CIFAR-10のような実際の画像のデータセットで学習を開始するには、少なくとも別のコンバージョンレイヤーを追加する必要があります。すなわちconv2およびpool2。 は、この例は、次のとおりです。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/image/cifar10/cifar10.py – iratzhash
はい、私はまた、2つのCONV層と2プールでそれを試してみました層。まだ約2.3で立ち往生しています –