タグ付けされた質問 「conv-neural-network」

11
binary_crossentropyとcategorical_crossentropyが同じ問題に対して異なるパフォーマンスを提供するのはなぜですか?
CNNをトレーニングして、テキストをトピックごとに分類しようとしています。バイナリクロスエントロピーを使用すると、最大80%の精度が得られます。カテゴリカルクロスエントロピーでは、最大50%の精度が得られます。 なぜなのかわかりません。これはマルチクラスの問題です。それは、カテゴリクロスエントロピーを使用する必要があり、バイナリクロスエントロピーを使用した結果は無意味であることを意味しませんか? model.add(embedding_layer) model.add(Dropout(0.25)) # convolution layers model.add(Conv1D(nb_filter=32, filter_length=4, border_mode='valid', activation='relu')) model.add(MaxPooling1D(pool_length=2)) # dense layers model.add(Flatten()) model.add(Dense(256)) model.add(Dropout(0.25)) model.add(Activation('relu')) # output layer model.add(Dense(len(class_id_index))) model.add(Activation('softmax')) 次にcategorical_crossentropy、損失関数として次のようにコンパイルします。 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) または model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 直観的には、カテゴリカルクロスエントロピーを使用する理由は理にかなっていますが、バイナリで良い結果が得られ、カテゴリで悪い結果が得られる理由がわかりません。

7
CuDNNのインストールを確認する方法は?
私は多くの場所を検索しましたが、私が得るすべてはそれをインストールする方法であり、それがインストールされていることを確認する方法ではありません。NVIDIAドライバーがインストールされ、CUDAがインストールされていることを確認できますが、CuDNNがインストールされていることを確認する方法がわかりません。助けてくれてありがとう、ありがとう! PS。 これはカフェの実装用です。現在、CuDNNを有効にせずにすべてが機能しています。


9
バッチ正規化とドロップアウトの注文?
元々の質問は、特にTensorFlowの実装に関するものでした。ただし、答えは一般的な実装です。この一般的な答えは、TensorFlowの正しい答えでもあります。 TensorFlowでバッチ正規化とドロップアウトを使用する場合(具体的にはcontrib.layersを使用)、順序について心配する必要がありますか? ドロップアウトを使用してすぐにバッチ正規化を実行すると、問題が発生する可能性があります。たとえば、バッチ正規化のシフトがトレーニング出力のより大きなスケール数にトレーニングするが、テスト中にドロップアウトなしで同じシフトがより小さな(より多くの出力を持つための補正により)スケール数に適用される場合、シフトがオフになっている可能性があります。TensorFlowバッチ正規化レイヤーはこれを自動的に補正しますか?それとも私が行方不明になった何らかの理由でこれは起こりませんか? また、これら2つを一緒に使用するときに注意すべき他の落とし穴はありますか?たとえば、上記に関して正しい順序で使用していると仮定すると(正しい順序があると仮定して)、連続する複数のレイヤーでバッチ正規化とドロップアウトの両方を使用すると問題が発生する可能性がありますか?すぐに問題が発生することはありませんが、何か不足している可能性があります。 どうもありがとうございました! 更新: 実験的なテストでは、と思われる順序がことを示唆してい事柄。同じネットワークを2回実行しましたが、バッチノルムとドロップアウトリバースのみを使用しています。ドロップアウトがバッチノルムの前にある場合、トレーニングの損失が減少するにつれて検証の損失が増加するように見えます。他のケースでは、どちらも下がっています。しかし私の場合、動きが遅いので、トレーニングを重ねると状況が変わる可能性があり、それは1つのテストにすぎません。より決定的で情報に基づいた回答をいただければ幸いです。

4
Tensorflow Strides引数
tf.nn.avg_pool、tf.nn.max_pool、tf.nn.conv2dのストライド引数を理解しようとしています。 ドキュメントは繰り返し言います strides:長さが4以上の整数のリスト。入力テンソルの各次元のスライディングウィンドウのストライド。 私の質問は: 4以上の整数のそれぞれは何を表していますか? なぜconvnetに対してstrides [0] = strides [3] = 1にする必要があるのですか? で、この例で、私たちは見ますtf.reshape(_X,shape=[-1, 28, 28, 1])。なぜ-1? 悲しいことに、-1を使用して再形成するためのドキュメントの例は、このシナリオにうまく変換できません。

1
早期停止にはどのパラメーターを使用する必要がありますか?
Kerasを使用してプロジェクトのニューラルネットワークをトレーニングしています。Kerasは早期停止の機能を提供しています。早期停止を使用してニューラルネットワークが過剰適合しないようにするために、どのパラメータを監視する必要があるかを知っていてもよいですか?

7
損失値に基づいてKerasにトレーニングを停止するように指示するにはどうすればよいですか?
現在、私は次のコードを使用しています。 callbacks = [ EarlyStopping(monitor='val_loss', patience=2, verbose=0), ModelCheckpoint(kfold_weights_path, monitor='val_loss', save_best_only=True, verbose=0), ] model.fit(X_train.astype('float32'), Y_train, batch_size=batch_size, nb_epoch=nb_epoch, shuffle=True, verbose=1, validation_data=(X_valid, Y_valid), callbacks=callbacks) 2エポックの間損失が改善されなかったときにトレーニングを停止するようにKerasに指示します。しかし、損失が一定の「THR」よりも小さくなった後、トレーニングを停止したいと思います。 if val_loss < THR: break ドキュメントで、独自のコールバックを作成する可能性があることを確認し ました:http: //keras.io/callbacks/しかし、トレーニングプロセスを停止する方法は見つかりませんでした。アドバイスが必要です。

1
拡張画像やその他の機能を備えたKerasイテレータ
画像のデータセットと.csv、各画像のデータがいくつかあるとします。あなたの目標は、畳み込みブランチと他のブランチ(私の場合はMLP)を持つNNを作成することです。 さて、ネットワークを作成する方法についてはたくさんのガイド(ここでは1つ、もう1つ)がありますが、それは問題ではありません。 ここでの問題は、拡張画像を追加するKeras フローからの[[convolution_input, other_features], target]場合の形でイテレーターを作成する方法です。convolution_inputImageDataGenerator より具体的には、n番目の画像(拡張されたものであるかどうかに関係なく)がNNに供給されると、その内部の元の機能が必要になりますother_features。 私はいくつかの試みを見つけました(こことここで、2番目は有望に見えましたが、拡張画像を処理する方法を理解することができませんでした)それを正確に実行していましたが、Kerasジェネレータが行う可能性のあるデータセット操作を考慮していないようですします。

1
ND畳み込み逆プログラム
私の教育では、畳み込みニューラルネットワークにN次元畳み込み層を実装しようとしています。 バックプロパゲーション機能を実装したいのですが。しかし、そのための最も効率的な方法はわかりません。 現在、私は以下を使用signal.fftconvolveしています: 転送ステップでは、フィルターを畳み込み、カーネルがすべてのフィルターを介して転送します。 バックプロパゲーションステップでは、派生物(FlipAllAxes関数ですべての次元で反転)を配列(https://jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/)で畳み込みます。すべてのフィルターとそれらを合計します。私が取る出力は、各フィルターの各導関数で畳み込まれた各画像の合計です。 私は、デリバティブをどのように畳み込むかについて特に混乱しています。以下のクラスを使用してバックプロパゲートすると、ウェイトのサイズが急激に増加します。 微分と出力およびフィルターの畳み込みをプログラムする正しい方法は何ですか? 編集: この論文(FFTによるたたみ込みネットワークの高速トレーニング)によると、これは私がしたいことを正確に実行しようとするものです。 前のレイヤーの導関数は、現在のレイヤーの導関数と重みの畳み込みによって与えられます。 dL / dy_f = dL / dx * w_f ^ T 重みの導関数は、導関数と元の入力の畳み込みの区分的合計です。 dL / dy = dL / dx * x 私が知っている限りでは、これを以下に実装しました。ただし、このレイヤーを使用して作成したネットワークは、トレーニング中に激しい変動を示すため、これは意図した結果を与えていないようです。 import numpy as np from scipy import signal class ConvNDLayer: def __init__(self,channels, kernel_size, dim): self.channels = channels self.kernel_size …

2
Pytorch CNNで損失が減少しない
私はPytorchでタスクのCNNを実行していますが、学習して精度を向上させることはできません。ここに投稿できるように、MNISTデータセットを使用するバージョンを作成しました。なぜ機能しないのかについての答えを探しています。アーキテクチャはすばらしいです。私はそれをKerasで実装し、3エポック後に92%以上の精度がありました。注:私がMNISTを60x60の画像に再形成したのは、それが私の「実際の」問題にあるためです。 import numpy as np from PIL import Image import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.utils.data import DataLoader from torch.autograd import Variable from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() def resize(pics): pictures = [] for image in pics: …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.