質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Python

    9269questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Keras

    290questions

kerasによる機械学習において損失係数が低下しない問題、中間層の設定について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,685

yohehe

score 26

加速度・ジャイロを回転行列で計算し、xyzの3次元で出力したデータを、ravel()で時間軸なしで1次元にしたデータで分類器を作成したく、機械学習を行なっています。
特徴量Xとしてkerasで機械学習を行いました。xyzデータを累積和としてdfデータに入れています。

import keras
from keras.models import Sequential
from keras.layers import Dense,Activation,Dropout
from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt

df=[]
#測定データをnpyデータで呼び出し、dfに格納
for i in range(40):
    acgydata=np.load(f"acgydata{i}.npy")
    onedata=[]
    x=[d[0] for d in acgydata]
    x=np.array(x).ravel()
    x=np.cumsum(x)
    y=[d[1] for d in acgydata]
    y=np.array(y).ravel()
    y=np.cumsum(y)
    z=[d[2] for d in acgydata]
    z=np.array(z).ravel()
    z=np.cumsum(z)
    onedata.append(x)
    onedata.append(y)
    onedata.append(z)
    onedata=np.ravel(onedata)
    df.append(onedata)
#特徴量とターゲットデータを設定
X=np.array(df)
(n_samples,n_features)=X.shape
y=np.array([0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3])
n_classes=len(np.unique(y))
y_keras=keras.utils.to_categorical(y,n_classes)
model=Sequential()
model.add(Dense(units=200,activation="relu",input_shape=(n_features,)))
model.add(Dropout(0.1))
model.add(Dense(units=100,activation="relu"))
model.add(Dropout(0.1))
model.add(Dense(units=n_classes,activation="softmax"))
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])

history=model.fit(X,y_keras,epochs=4000,validation_split=0.1,batch_size=n_samples,verbose=2)
result=model.predict_classes(X,verbose=0)


#以下で損失関数のグラフを描画
val_loss,=plt.plot(history.history["val_loss"],c="orange")
loss,=plt.plot(history.history["loss"],c="blue")
plt.legend([loss,val_loss],["loss","val_loss"])
plt.show()
#accuracyをグラフ化
val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
acc,=plt.plot(history.history["acc"],c="red")
plt.legend([loss,val_acc],["acc","val_acc"])
plt.show()

イメージ説明イメージ説明
損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。

追記
アドバイスをいただきまして中間層のunits、batchsize=1などに変更した結果を追記いたします。
様々なアドバイスでval_loss,accに振幅がみられるようになってきました。やはりサンプルが少なすぎるのが問題の根本なのかもしれません。

model=Sequential()
#設定値は適当
model.add(Dense(units=20,activation="relu",input_shape=(n_features,)))
model.add(Dropout(0.1))
model.add(Dense(units=10,activation="relu"))
model.add(Dropout(0.1))
model.add(Dense(units=n_classes,activation="softmax"))
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
#学習を行う
history=model.fit(X,y_keras,epochs=4000,validation_split=0.5,batch_size=1,verbose=2)
コード


イメージ説明
イメージ説明

6/17 Dropoutをの代わりにregurlarizationを導入

#neuralnetworkの以下に変更定義を変更 Dropoutを中止し、l2による正則化をを中間層に設定
from keras import regularizers
model=Sequential()
model.add(Dense(units=20,activation="relu",input_shape=(n_features,)))
model.add(Dense(10, input_dim=20,
                kernel_regularizer=regularizers.l2(0.01),
                activity_regularizer=regularizers.l2(0.01)))
model.add(Dense(units=10,activation="relu"))
model.add(Dense(units=n_classes,activation="softmax"))
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
history=model.fit(X,y_keras,epochs=6000,validation_split=0.5,batch_size=20,verbose=2)

コード


イメージ説明
イメージ説明

いただいたアドバイスをもとに中間層の設定にDropoutをなくし、l2によるregularlizationを導入した結果を追記しました。regularizationとactivity_regularizerの引数については調べているものの数値の理解がまだ曖昧ですので適切かどうか不明瞭です。正しいかどうかはわかりませんがloss,val_loss共に低下し、accracyについても変動はみられています。ありがとうございます。

#l2_lossを定義
def l2_loss(w):
return 0.5 * np.sum(w ** 2)

w1 = np.array([1.0, 2.0, 3.0])
w2 = np.array([4.0, 5.0, 6.0])
#aを欠損値とする
a=3.0
loss = a + l2_loss(w1) + l2_loss(w2)
を設定しまして,中間層の正則化に自己で導入したパラメータを導入
kernel_regularizer=l2_loss
コード


で中間層を変更するとエラーがでてきてしまうため、解決致しましたら追記いたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yohehe

    2018/06/15 23:38 編集

    何度か加筆修正しております。修正しまして使用している全プログラムデータを記載いたしました。

    キャンセル

  • hayataka2049

    2018/06/16 00:00 編集

    fitの処理が抜けていませんか

    キャンセル

  • yohehe

    2018/06/16 00:04 編集

    なんどもすみません。fitの処理の項目がペーストできていなかったため、修正しました。

    キャンセル

回答 2

+2

変数600個に対して条件式が40個だったら560個の未知変数が残るので…

それとも、書き間違いで40変数に対する600サンプルでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 22:46 編集

    すみません間違っておりました。ご指摘ありがとうございます。n_samples:40,n_features:600の設定で、サンプル1つにつきxyzデータを並べた600のデータを特徴量としております。
    修正いたしました。

    キャンセル

  • 2018/06/18 00:11

    val_lossがうまく行っていそうなのに、val_accが0に沈んでいるのが若干気持ち悪いですね。
    epoch数が多すぎるのもあるのですが…

    差し支えなければデータの方を公開できませんか?

    キャンセル

checkベストアンサー

+1

40件のデータでvalidation_split=0.1って、4件でバリデーションすることになります。各動作1つずつ。これは各ラベルごとに均等に振られる保障とかもないらしいので、なんだか怪しいです。
他のミスとか見落としているかもしれませんが、とりあえず最初に気になったのはそこです。0.5くらいにしたら平然と動いたりしませんか。

 追記

y_keras=keras.utils.to_categorical(y,n_classes)


以下を消してこのコードを挿入。交差検証した正解率が出てきます。

from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import cross_validate

# 以下4行は消す。消さないでこのコードだけ1つのファイルにまとめて書くと、digitsで動く
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data  # X=np.array(df)で作ったXになるように
y = digits.target  # y=np.array([0,1,1,1,1,...で作ったyになるように

rfc = RandomForestClassifier(n_estimators=1000, n_jobs=-1)
gnb = GaussianNB()

for name, clf in zip(["RandomForest", "GaussianNB"], [rfc, gnb]):
    d = cross_validate(clf, X, y, cv=4, scoring="accuracy", n_jobs=-1)
    print(name)
    print("accuracy:{:.5f}".format(d["test_score"].mean()))
""" => こんな感じ
RandomForest
accuracy:0.94273
GaussianNB
accuracy:0.80866
"""

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/16 00:43

    アドバイスありがとうございます。validiation_split=0.5に変更して試してみたのですが、predictの正答率が26%と低下してしまい、val_loss,lossのグラフはあまり変わらずという結果になりました。
    中間層のデータなども再設定しながらpredictの正答率とlossのグラフが変わらないか再度試してみます。
    いつもありがとうございます。

    キャンセル

  • 2018/06/16 00:44

    ハズレでしたか。こちらも、もうちょっとよくコードを読んでみます

    キャンセル

  • 2018/06/16 00:53

    理由はわかりませんが、中間層のunitsを200→50,100→25と少なく設定するとpredictの正答率の上昇がみられています。val_lossとval_accの直線になっているのは変わりませんでしたが。中間層を設定し直してみます。

    キャンセル

  • 2018/06/16 01:00

    データが少ないので、ユニット数が多くてもどうせまともに学習しないんです。ユニット数を減らすと、モデルが単純になった分だけオーバーフィッティングしなくなってまともになる
    ところで、ログに出てくるval_lossの値は一定ですか? それとも、グラフだと直線になっちゃうくらいの小さい変動だけど、一応動いてる? 後者なら「それで正しい動作」という可能性も十分ありそうな・・・

    キャンセル

  • 2018/06/16 01:10

    アドバイス感謝いたします。勉強になります。
    何度か試しているのですが、units=20と10にしましたところval_lossとval_accに振幅がみられるようになってきました。ご指摘の通りunits数とモデルデータが少なすぎること両方が問題だった可能性があるかもしれません。もっと少して試してみます。

    キャンセル

  • 2018/06/16 01:19 編集

    ということは、とりあえずはちゃんと動いているみたいですね。よかったです
    データの質も量もダメという段階なので、とにかく小さなモデルで学習させてどんなものになるか、見てみるしかありません
    dropout率を上げると多少は汎化が稼げるかもしれません。あと、batch_size=n_samplesはもしかしたらしんどいかも(完全なバッチ学習なので、さっさと局所最適解に落ちそう)。小さくする方向にいじってみるともう少しなんとかなるかも

    キャンセル

  • 2018/06/16 01:26

    何度かためしているのですが、unitsも10以下だと少なすぎるためかpredictの正答率が下がり、val_acc,val_lossともに振幅がみられなくなる。なぜかは不明ですが、validiation_split=0.5よりも0.1の方がpredictの結果がよく、val_lossが直線でなくなりやすい傾向がありました。
    原因がわかりませんがunitsを20前後でとるとepochs3000以降から過学習のためかval_lossが振幅しながら上昇していっているのでkerasの学習は正しい動作をしているのかもしれません。
    理想的な中間層の設定やvalidiation,epochsの設定などの難しさを実感しております。

    キャンセル

  • 2018/06/16 01:30

    バッチサイズを減らして、学習率も減らすと良いかもしれません。

    やるには'adam'ではなくoptimizerを渡さないといけないが…

    キャンセル

  • 2018/06/16 01:31

    n_samplesが少なすぎてbach_sizeも課題があるかもしれないのですか。batch_sizeの設定も調整してみます。

    キャンセル

  • 2018/06/16 01:31 編集

    validiation_split=0.5だとデータの半分をvalidateに回すので、学習に使えるデータがたった20コになります(精度下がって当然)。あと、validiation_split=0.1だと4コのデータなので、lossは直線にはならない・・・validationに使うデータを増やすと平滑化されます
    直線になってるのは過学習で落ち着いちゃってるから、ってことですかねぇ。いっそオンラインでやったらどうなんだろう

    キャンセル

  • 2018/06/16 01:39

    validiation_sizesの数値のいい経験になりました。サンプルが絶対的に少ないのが問題ですかね、何度かbatch_sizeを減らして調整したのですが、val_loss,accは直線にはなっていないですが、ほぼ直線という状況は変わりませんでした。
    オンラインというのはどういうことでしょうか?RNNのような再帰的な手法ということでしょうか?

    キャンセル

  • 2018/06/16 01:42

    mkgrei様、アドバイスありがとうございます。optimizer="adam"をoptimizerに変更するとエラーが出てしまいます。調整すらできず勉強足らずで申し訳ありません。

    キャンセル

  • 2018/06/16 01:42

    batch_size=1のことです>オンライン バッチ学習の対極にある方法です。中間がいわゆるミニバッチ

    キャンセル

  • 2018/06/16 01:47

    https://keras.io/ja/optimizers/
    ちょっと言葉足らずでした。
    ライブラリから適切なものを選んで来ないといけません。
    lrがキーワードです。(learning rate)

    キャンセル

  • 2018/06/16 01:49

    batch_size=1まで減らす手法もあるのですね。今試してみます。夜遅くまでありがとうございます。

    キャンセル

  • 2018/06/16 01:56 編集

    ところで、このデータ、ニューラルネットに入れる前に他の手法で分類して正解率みたりしてますか?
    データが悪いのか、ニューラルネットが悪いのか容易には判断できない・・・

    キャンセル

  • 2018/06/16 02:03

    アドバイスをいただいた手法を取り入れたグラフを追記いたしました。本当にありがとうございます。

    先日hayataka様にアドバイスをいただきまして、ナイーブベイズ、svm,決定木手法,ランダムフォレストをテストしております。
    ナイーブベイズが最も正答率が低く60%前後、svm,決定木は90%以上,ランダムフォレストが最も正答率が高く95%以上の結果がでております。新しくテストデータを分類器に入れてもほぼ正解できていました。
    データに最適な分類器があるということを体感いたしました。

    キャンセル

  • 2018/06/16 02:05 編集

    それは交差検証で出した数字ですか? それとも、trainデータの正解率? テストデータを入れても、というのがどういうことを指しているのかちょっと疑問です。
    もし後者なら、それだけ見ててもあまり意味はありませんよ(このニューラルネットもtrainデータに対しては7,8割正解している:ただのオーバーフィッティングですね)

    キャンセル

  • 2018/06/16 02:06

    mkgrei様,ありがとうございます。adamだけではなく、optimizerも最適なものを選ぶ必要があるのですね。learning rateについて勉強します。

    キャンセル

  • 2018/06/16 02:12

    clf.predict(X)でのtrainデータの正解率という意味でした。これには、あまり意味がないのでしょうか。
    sample,trainデータでない新しく取った動作データをpredictにかけるとランダムフォレストだと正解率が高そうです。まだ十分なデータが取れているとは言えませんのではっきり回答できずすみません。

    キャンセル

  • 2018/06/16 02:17

    clf.predict(X)で出た正解率の高い手法を用いることがベストではないのですか。すみません、初めて知りました。交差検証をしてデータが正しく予測できているか測定して初めてその手法が適切かどうか判断すべきでした。

    キャンセル

  • 2018/06/16 02:19

    まあ、とりあえずやってみましょう。簡単なコードを回答に張りますから、今kerasでやってるコードを別名で保存して、下の方(kerasでやっているところ)を書き換えてみてください

    キャンセル

  • 2018/06/16 02:27

    極端な話、「覚えれば」trainデータに対して100%の分類器は簡単に作れます。けど、未知のデータに対応できなかったら使い物にならないですから
    最初のうちは「Python機械学習プログラミング」あたりを買って読むと良いですよー

    キャンセル

  • 2018/06/16 02:33

    ありがとうございます。全く知らないことばかりで勉強になります。
    教えていただいた方法だと
    RandomForest
    accuracy:0.63542
    GaussianNB
    accuracy:0.56250
    自分がやったランダムフォレストとは異なり、低い数値になっていました。これが交差テストの検証なのでしょうか。

    キャンセル

  • 2018/06/16 02:37

    私が行っていたのはテストデータばかりでそれに対して分類器を調整していたということですか。知らない情報ばかりで勘違いしていたことも多く、本当に勉強になっております。教えていただいた本を買ってみます。

    キャンセル

  • 2018/06/16 02:52 編集

    まあ、交差検証の意義とか仕組みは、それはそれで良いとして
    今たいせつなのは、とりあえず0.64くらいは発揮したということですね。それなりの分類はできていると判断します。データはそんなにひどくない訳です
    ニューラルネットがダメダメすぎるのは何か他の原因があるはずなんですが、なんだろう・・・(根本的にデータが少なすぎる可能性が高いだろうけど)

    キャンセル

  • 2018/06/16 03:05

    とりあえず、validation_splitを0.25にしておくと4-foldの交差検証と同じくらいの条件になります。
    それで、dropout率はもう少し上げて(0.5くらいまでは問題ないはず)、ユニット数は多少増やしても良いかもしれません。それくらいで、なんとかvalidationのlossが下の方に収束していくグラフになれば良いんですが

    キャンセル

  • 2018/06/16 13:43

    アドバイスをもとに何度か試したのですが、validation_split=0.25にあげ、Dropoutを0.5までと、unitsを40前後で調節しながら複数回試しました。しかしながら、val_lossは振幅を見せることは度々ありましたが、過学習のような上昇をみせることが多かったです。epochsも増やしてみたのですが、validationlossが低下することはなく、validationaccuracyはほとんどが直線ばかりでした。
    サンプルを増やして、もう少し勉強してみます。昨日はありがとうございます。

    キャンセル

  • 2018/06/16 14:12 編集

    過学習の対策としては、ドロップアウトの他に
    ランダムで重みを決める時の標準偏差を下げる、
    L2ノルムを使う、batch normalizationを使うなどが挙げられます。
    感覚的にはこれくらいの規模であれば、ドロップアウトよりもL2ノルムの方が効果的な気がします。


    kerasの使い方はわからないのですが、重みの推移を確認する方法があれば、確認してみるのもいいと思います。
    重みの値が初期値よりも、部分的もしくは全体的に大きくなっていたら、過学習の可能性があります。
    逆に重みの値が全体的に均一に保たれていたら、過学習以外が原因の可能性が高いです。

    キャンセル

  • 2018/06/16 15:15

    puroko3様、アドバイスありがとうございます。Dense以外にはconvolveによる畳み込み処理についてしか知らなかったので、L2ノルム:正則化について調べてどのように実装するのか調べてみます。
    なるほど、weightの可視化を行って調べてみるという手法もあるのですね。kerasの重みの推移の可視化についても進めていってみます。

    キャンセル

  • 2018/06/16 16:23 編集

    l2ノルムは欠損値にネットワークの全ての重みの二乗和を足すだけのものです。
    というよりL2ノルムじゃなくて、L2ノルムのweight decayと言った方が正しかったですね。
    混乱させてすいません。

    kerasなりの書き方があるかもしれませんが、実装を載せておきます。

    import numpy as np

    def l2_loss(w):
    .... """
    ....0.5はなくてもよいし、ハイパーパラメータとして使ってもよい
    ....値が大きいほど大きい重みにペナルティを与える事が出来る。
    ...."""
    ....return 0.5 * np.sum(w ** 2)

    w1 = np.array([1.0, 2.0, 3.0])
    w2 = np.array([4.0, 5.0, 6.0])

    #欠損値を3.0とした場合
    loss = 3.0 + l2_loss(w1) + l2_loss(w2)
    print(loss)

    インデントは....で表しています。
    理論としては単純で、重みが大きいほど欠損値もあがるので、ネットワークは重みを小さくしようと学習します。

    キャンセル

  • 2018/06/16 17:18

    すみません、今本などで調べているのですが導入できず調べております。
    教えていただきましたdefで引数weightのノルムの関数を定義したこものは、どこに導入すべきなのでしょうか?
    Dropoutやconvolveによる畳み込みのようにmodel.addでweightに関数重み付けを設定するようなものとして設定していくことが可能かどうかプログラムの書き方がわかっておりません。理論的にはDenseでの中間層のunitsの設定の部分であるかとは思うのですが。
    まだ機械学習を始めたばかりでアドバイスにうまく応えられず質問ばかりで申し訳ないです。時間かかるかもしれませんが調べてみます。

    キャンセル

  • 2018/06/16 18:03

    https://stackoverflow.com/questions/41260042/global-weight-decay-in-keras
    この回答によると、modelを追加していく時に、引数で設定するようです

    ↓日本語版api
    https://keras.io/ja/regularizers/

    恐らくkernel_regularizer=regularizers.l2がそれに当たると思います。

    また kernel_regularizerは、オリジナルの関数を受け取れるようです。
    下の方にあるkernel_regularizer=l1_regがそれに当たると思います。
    kerasがnumpyと互換があるのであれば、先ほど書いた関数を渡して
    kernel_regularizer=l2_loss と出来ると思います

    まあkerasの方で用意されているようですし、そちらを使った方が良さげですね。
    ただ先ほども言ったように、kerasについては詳しくないので、間違っている可能性もあります。

    キャンセル

  • 2018/06/17 20:01

    hayataka2049様、良い本の情報ありがとうございます。正則化や次元圧縮などについても記載されており、勉強になっています。
    puroko様、返信ありがとうございます。dropoutを変更し、regularizersを導入したデータのloss,accグラフを追記しました。手法としては適切かはわかりませんが、dropout時にはみられなかったval_lossに低下がみられました。ありがとうございました。
    教えていただいたl2_lossのハイパーパラメータの設定についてはもう少し勉強が必要みたいで頑張ってみます。

    キャンセル

  • 2018/06/17 23:52

    L2正則化が効きましたか。もうちょっと正則化の効きを強くして(0.01を上げる)、学習に回すデータを増やして(validation_splitを下げる)、バッチサイズを小さめにするともうちょっと上の方まで持っていけるかもしれません

    キャンセル

  • 2018/06/18 13:31 編集

    効果が出てよかったです。
    後私の書いた関数は忘れてもらっても構いません。
    あれは、l2ノルムがどういうものか?中でどういう処理をしているのか?というのを理解してもらえればいいなと思い書いただけで
    kerasの方で同じものが用意されていますし、
    既に実装に成功しているようなので、私のコードをあえて使う必要はないです。

    後L2とドロップアウトは併用可能ですので、一緒に入れておいてもいいと思います。
    効果があるかどうかはわかりませんが、今回の場合とりあえず入れておいて損はないと思います

    キャンセル

  • 2018/06/18 14:49

    hayataka2049様、ありがとうございます。validiationspilitを下げるとval_accuracyがやや直線になってしまいましたが、predictの正答率は上がったという結果でした。それでも50%に届かないくらいでしたが。サンプルを増やすことが根本的な点でありそうなので増やしながらアドバイスを活かしてみます。

    puroko3様、ありがとうございます。
    l2ノルムによる正則化によるパラメータに条件を課すこととdropoutは併用可能なんですね。勉強になります。
    組み合わせを試しながら最適な部分を探していってみようと思います。

    キャンセル

同じタグがついた質問を見る

  • Python

    9269questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Keras

    290questions