タグ付けされた質問 「keras」

PythonおよびR用のオープンソースの高レベルのニューラルネットワークライブラリ。TensorFlowまたはTheanoをバックエンドとして使用できます。

4
ニューラルネットワークのバッチサイズとは何ですか?
Python Keras packageニューラルネットワークに使用しています。これがリンクです。であるがbatch_size、試験サンプルの数に等しいですか?ウィキペディアから次の情報があります。 ただし、他の場合では、sum-gradientを評価するには、すべてのsummand関数からの勾配の高価な評価が必要になる場合があります。トレーニングセットが膨大で、単純な公式が存在しない場合、勾配の評価にはすべての加数関数の勾配を評価する必要があるため、勾配の合計の評価は非常に高価になります。すべての反復で計算コストを節約するために、確率的勾配降下では、すべてのステップで被加数関数のサブセットをサンプリングします。これは、大規模な機械学習の問題の場合に非常に効果的です。 上記の情報はテストデータを説明していますか?これbatch_sizeはkeras(勾配更新ごとのサンプル数)と同じですか?

2
Keras「埋め込み」レイヤーはどのように機能しますか?
Kerasライブラリの「埋め込み」レイヤーの動作を理解する必要があります。Pythonで次のコードを実行します import numpy as np from keras.models import Sequential from keras.layers import Embedding model = Sequential() model.add(Embedding(5, 2, input_length=5)) input_array = np.random.randint(5, size=(1, 5)) model.compile('rmsprop', 'mse') output_array = model.predict(input_array) 次の出力が得られます input_array = [[4 1 3 3 3]] output_array = [[[ 0.03126476 0.00527241] [-0.02369716 -0.02856163] [ 0.0055749 0.01492429] [ 0.0055749 0.01492429] …

5
ニューラルネットワークのマルチクラス、マルチラベル分類タスクの損失関数は何ですか?
ニューラルネットワークをトレーニングして、オブジェクトのセットをnクラスに分類しています。各オブジェクトは、同時に複数のクラスに属することができます(マルチクラス、マルチラベル)。 マルチクラス問題の場合、一般に、mseの代わりにソフトマックスとカテゴリクロスエントロピーを損失関数として使用することをお勧めしますが、その理由はだいたいわかります。 マルチラベルの私の問題については、各クラスの確率が互いに独立している必要があるため、もちろんソフトマックスを使用することは意味がありません。したがって、最後のレイヤーは、入力をすべてのクラスの確率範囲0..1に押しつぶすシグモイドユニットです。 今、私はこれにどの損失関数を使用すべきかわからない。カテゴリクロスエントロピーの定義を見ると、1になるはずのニューロンの出力のみが考慮され、他のニューロンは無視されるため、この問題にはあまり当てはまらないと思います。 バイナリクロスエントロピーは、より適切に聞こえますが、出力ニューロンが1つの場合のバイナリ分類の問題については、これまでに言及しただけです。 重要な場合に備えて、トレーニングにpythonとkerasを使用しています。

5
正弦波の予測でニューラルネットワークを改善するにはどうすればよいですか?
ここでは、見て: あなたは場所を正確にトレーニングデータの終了を確認することができます。トレーニングデータから行くまで1。−1−1-1111 Kerasと、tanhアクティベーションを使用した1-100-100-2の高密度ネットワークを使用しました。pとqの2つの値pとqから結果を計算します。このように、1より小さい値のみを使用して、任意のサイズの数値を実現できます。 私はまだこの分野の初心者であるため、簡単に説明してください。

3
Kerasを使用したLSTMのinput_shapeパラメーターについて
「シーケンス分類用のStacked LSTM」という名前のKerasのドキュメントに記載されている例を使用しようとしていますが(以下のコードを参照)input_shape、データのコンテキストでパラメーターを把握できません。 入力として、最大長31のパディングされたシーケンスに整数でエンコードされた25の可能な文字のシーケンスのマトリックスがあります。その結果、my x_trainはshapeの(1085420, 31)意味を持ち(n_observations, sequence_length)ます。 from keras.models import Sequential from keras.layers import LSTM, Dense import numpy as np data_dim = 16 timesteps = 8 num_classes = 10 # expected input data shape: (batch_size, timesteps, data_dim) model = Sequential() model.add(LSTM(32, return_sequences=True, input_shape=(timesteps, data_dim))) # returns a sequence of vectors of …
20 lstm  keras  shape  dimensions 

3
Conv1DとConv2Dの違いは何ですか?
私はkeras convolution docsを調べていましたが、Conv1DとConv2Dの2種類のけいれんを発見しました。私はいくつかのWeb検索を行いましたが、これがConv1DとConv2Dについて理解していることです。Conv1Dはシーケンスに使用され、Conv2Dは画像に使用します。 私は常に畳み込みニューラルネットワークが画像にのみ使用されていると考え、このようにCNNを視覚化しました 画像は大きなマトリックスと見なされ、フィルターはこのマトリックス上をスライドしてドット積を計算します。これは、kerasがConv2Dとして言及していることを信じています。Conv2Dがこのように機能する場合、Conv1Dのメカニズムはどのようなもので、そのメカニズムをどのように想像できますか?

4
可変サイズの画像を畳み込みニューラルネットワークへの入力として与えることは可能ですか?
オブジェクト検出用の畳み込みニューラルネットワークへの入力として、可変サイズの画像を提供できますか?可能であれば、どうすればそれを実行できますか? しかし、画像をトリミングしようとすると、画像の一部が失われ、サイズを変更しようとすると、画像の鮮明さが失われます。画像の鮮明さが主な考慮事項である場合、固有のネットワークプロパティを使用するのが最適であることを意味しますか?

1
単一のReLUがReLUを学習できないのはなぜですか?
私のニューラルネットワークのフォローアップとして、ユークリッド距離を学習することすらできないため、さらに単純化して、単一のReLU(ランダムな重み)を単一のReLUにトレーニングしようとしました。これは最も単純なネットワークですが、収束に失敗する時間の半分です。 最初の推測がターゲットと同じ方向にある場合、すぐに学習し、正しい重み1に収束します。 最初の推測が「後方」である場合、ゼロの重みでスタックし、低損失の領域に到達することはありません。 理由がわかりません。勾配降下は、グローバルミニマムへの損失曲線に簡単に従うべきではありませんか? サンプルコード: from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, ReLU from tensorflow import keras import numpy as np import matplotlib.pyplot as plt batch = 1000 def tests(): while True: test = np.random.randn(batch) # Generate ReLU test case X = test Y = test.copy() Y[Y < 0] …


2
シングルユニットLSTMと3ユニットLSTMニューラルネットワークの違い
次のKerasコードのLSTM input_t = Input((4, 1)) output_t = LSTM(1)(input_t) model = Model(inputs=input_t, outputs=output_t) print(model.summary()) として表すことができます model.predict(np.array([[[1],[2],[3],[4]]]))(唯一の)LSTMユニットを呼び出すと、最初にベクトル[1]が処理され、次に[2]と前の入力からのフィードバックが処理されて、ベクトル[4]まで続きます。つまり、です。x1= [ 1],x2= [ 2 ],x3= [ 3 ] 、x4= [ 4 ]x1=[1]、バツ2=[2]、バツ3=[3]、バツ4=[4]x_1 = [1], x_2 = [2], x_3 = [3], x_4 = [4] 次のニューラルネットワークが同じ入力シーケンスを処理する方法がわかりません [1],[2],[3],[4] input_t = Input((4, 1)) output_t = LSTM(3)(input_t) model = Model(inputs=input_t, …

3
CIFAR-10は60%を超える精度を得ることができない、Tensorflowバックエンドを使用するKeras [終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新することがありますので、話題のクロス検証済みのため。 昨年休業。 CIFAR-10データセットで15エポック後にトレーニングを行うと、検証損失が減少せず、1.4程度に留まるようになります(60%の検証精度)。トレーニングセットをシャッフルし、255で割って、float32としてインポートしました。Conv2Dレイヤーにドロップアウトがある場合とない場合の両方で、多数のアーキテクチャーを試しましたが、何も機能しないようです。同じアーキテクチャは、MNISTのテストセットで99.7%の精度を達成します。以下のアーキテクチャをご覧ください。 (注:過剰適合を防ぐために、Adamオプティマイザーのドロップアウトを増やし、学習率を上げたり下げたりしてみましたが、これはすべて過剰適合を防ぐことですが、トレーニングとテストセットの両方で約60%の同様の低い精度になっています)。 with tf.device('/gpu:0'): tf.placeholder(tf.float32, shape=(None, 20, 64)) #placeholder initialized (pick /cpu:0 or /gpu:0) seed = 6 np.random.seed(seed) modelnn = Sequential() neurons = x_train_reduced.shape[1:] modelnn.add(Convolution2D(32, 3, 3, input_shape=neurons, activation='relu', border_mode='same')) modelnn.add(Convolution2D(32, 3, 3, activation='relu', border_mode='same')) modelnn.add(MaxPooling2D(pool_size=(2, 2))) modelnn.add(Dropout(0.2)) modelnn.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same')) modelnn.add(Convolution2D(64, 3, 3, …

2
Kerasの単純な線形回帰
この質問を見た後:Kerasを使用して線形回帰をエミュレートすることを試みて、私は勉強の目的で、そして私の直感を発展させるために、自分の例を転がそうとしました。 単純なデータセットをダウンロードし、1つの列を使用して別の列を予測しました。データは次のようになります。 これで、単一の1ノードの線形レイヤーを持つ単純なケラスモデルを作成し、その上で勾配降下法を実行しました。 from keras.layers import Input, Dense from keras.models import Model inputs = Input(shape=(1,)) preds = Dense(1,activation='linear')(inputs) model = Model(inputs=inputs,outputs=preds) sgd=keras.optimizers.SGD() model.compile(optimizer=sgd ,loss='mse',metrics=['mse']) model.fit(x,y, batch_size=1, epochs=30, shuffle=False) そのようなモデルを実行すると、nanすべてのエポックで損失が出ます。 jupyterノートブックへのリンク だから私はものを試してみることに決めました、そして私が途方もなく小さい学習率を使用する場合に のみまともなモデルを得るsgd=keras.optimizers.SGD(lr=0.0000001): なぜこれが起こっているのですか?私が直面するすべての問題に対して、このように手動で学習率を調整する必要がありますか?ここで何か悪いことをしていますか?これは可能な限り簡単な問題だと思いますよね? ありがとう!

3
トレーニング中に損失/精度が変動するのはなぜですか?(ケラス、LSTM)
KerasでLSTMネットワークを使用しています。訓練中、損失は大きく変動しますが、なぜそれが起こるのか分かりません。 最初に使用していたNNは次のとおりです。 トレーニング中の損失と精度は次のとおりです。 (実際には最終的に精度は100%に達しますが、約800エポックかかります。) これらの変動は、ドロップアウトレイヤー/学習率の変化(rmsprop / adamを使用)が原因で発生すると考えたので、より単純なモデルを作成しました。 私はまた、勢いや衰退のないSGDを使用しました。別の値を試しましlrたが、同じ結果が得られました。 sgd = optimizers.SGD(lr=0.001, momentum=0.0, decay=0.0, nesterov=False) しかし、私はまだ同じ問題を抱えていました。損失は単に減少するのではなく変動していました。私は常に損失は徐々に下がっていくはずだと思っていましたが、ここではそのようには動作しないようです。 そう: トレーニング中に損失がそのように変動するのは正常ですか?そして、なぜそれが起こるのでしょうか? そうでない場合、lrパラメーターが非常に小さい値に設定されている単純なLSTMモデルでこれが発生するのはなぜですか? ありがとう。(同様の質問をここで確認しましたが、問題の解決には役立たなかったことに注意してください。) 更新: 1000以上のエポックの損失(BatchNormalizationレイヤーなし、Kerasの修飾子RmsProp): 更新。2: 最終的なグラフの場合: model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) history = model.fit(train_x, train_y, epochs = 1500) データ:(ロボットのセンサーからの)電流の値のシーケンス。 ターゲット変数:ロボットが動作している表面(ワンホットベクトル、6つの異なるカテゴリとして)。 前処理: シーケンスが長くなりすぎないようにサンプリング周波数を変更しました(LSTMは他に学習しないようです)。 シーケンスを小さいシーケンスに切り取ります(小さいシーケンスすべてで同じ長さ:それぞれ100タイムステップ)。 6つのクラスのそれぞれに、トレーニングセット内のサンプルの数がほぼ同じであることを確認します。 パディングなし。 トレーニングセットの形状(#sequences、#timesteps in a sequence、#features): (98, 100, 1) 対応するラベルの形状(6つのカテゴリのワンホットベクトルとして): (98, 6) …
11 lstm  rnn  keras 

2
ケラスのSGDでミニバッチサイズを設定する方法
私はケラスが初めてで、あなたの助けが必要です。 私はケラスでニューラルネットをトレーニングしており、損失関数は二乗差b / wネットの出力とターゲット値です。 勾配降下法を使用してこれを最適化したいと思います。ネット上のリンクをたどると、一般的に使用される3種類の勾配降下法があることがわかりました。 単一サンプル勾配降下:ここで、勾配は反復ごとに1つのサンプルのみから計算されます->勾配はノイズが多い場合があります。 バッチ勾配降下:ここで、勾配はデータセット内のすべてのサンプルから計算された勾配の平均です->勾配はより一般的ですが、巨大なデータセットには扱いにくいです。 ミニバッチ勾配降下:バッチGDに似ています。データセット全体を使用する代わりに、いくつかのサンプル(batch_sizeによって決定される)のみを使用して、すべての反復で勾配を計算します->あまりノイズが多くなく、計算上扱いにくい->両方の長所。 質問: ケラスでミニバッチ勾配降下法を実行したいと思います。これどうやってするの?SGDオプティマイザーを使用する必要がありますか? SGDを使用する場合、batch_sizeを設定するにはどうすればよいですか?batch_sizeを設定するためのSGD関数のパラメーターがないようです。 optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False) Kerasのmodel.fit()にbatch_sizeパラメータがあります。 history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1) これはミニバッチ勾配降下法のバッチサイズと同じですか?そうでない場合、入力のバッチでトレーニングするとはどういう意味ですか?「batch_size」という意味ではありませんか。のスレッドが並列に実行され、モデルの重みを並列に更新しますか? それが役立つ場合は、これまでに書いたpythonコードスニペットを次に示します。

1
私のニューラルネットワークはユークリッド距離も学習できません
だから私は自分自身にニューラルネットワークを教えようとしています(猫の写真を分類するのではなく、回帰アプリケーションのために)。 私の最初の実験は、FIRフィルターと離散フーリエ変換を実装するためのネットワークのトレーニング(「前」と「後」の信号でトレーニング)でした。これらはどちらも活性化機能のない単一のレイヤーで実装できる線形演算だからです。 どちらもうまくいきました。 それで、私はを追加してabs()、振幅スペクトルを学習させることができるかどうかを見たかったのです。最初に、非表示層に必要なノードの数を考え、3のReLUがの大まかな近似に十分であることを認識したabs(x+jy) = sqrt(x² + y²)ので、その操作を単独の複素数(2入力→3 ReLUノードの非表示層→1)で単独でテストしました出力)。時々それは動作します: しかし、私がそれを試すほとんどの場合、それは極小値で行き詰まり、正しい形を見つけることができません: KerasですべてのオプティマイザーとReLUバリアントを試してみましたが、それほど違いはありません。このような単純なネットワークを確実に収束させるために他に何かできることはありますか?それとも私は間違った態度でこれに近づいていますか、そしてあなたは問題で必要以上に多くのノードを投げるはずであり、それらの半分が死んだとしても大したこととは考えられませんか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.