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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

解決済

2回答

6245閲覧

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

yohehe

総合スコア48

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

1クリップ

投稿2018/06/15 12:49

編集2018/06/17 10:54

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

python

1 2import keras 3from keras.models import Sequential 4from keras.layers import Dense,Activation,Dropout 5from sklearn import datasets 6import numpy as np 7import matplotlib.pyplot as plt 8 9df=[] 10#測定データをnpyデータで呼び出し、dfに格納 11for i in range(40): 12 acgydata=np.load(f"acgydata{i}.npy") 13 onedata=[] 14 x=[d[0] for d in acgydata] 15 x=np.array(x).ravel() 16 x=np.cumsum(x) 17 y=[d[1] for d in acgydata] 18 y=np.array(y).ravel() 19 y=np.cumsum(y) 20 z=[d[2] for d in acgydata] 21 z=np.array(z).ravel() 22 z=np.cumsum(z) 23 onedata.append(x) 24 onedata.append(y) 25 onedata.append(z) 26 onedata=np.ravel(onedata) 27 df.append(onedata) 28#特徴量とターゲットデータを設定 29X=np.array(df) 30(n_samples,n_features)=X.shape 31y=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]) 32n_classes=len(np.unique(y)) 33y_keras=keras.utils.to_categorical(y,n_classes) 34model=Sequential() 35model.add(Dense(units=200,activation="relu",input_shape=(n_features,))) 36model.add(Dropout(0.1)) 37model.add(Dense(units=100,activation="relu")) 38model.add(Dropout(0.1)) 39model.add(Dense(units=n_classes,activation="softmax")) 40model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"]) 41 42history=model.fit(X,y_keras,epochs=4000,validation_split=0.1,batch_size=n_samples,verbose=2) 43result=model.predict_classes(X,verbose=0) 44 45 46#以下で損失関数のグラフを描画 47val_loss,=plt.plot(history.history["val_loss"],c="orange") 48loss,=plt.plot(history.history["loss"],c="blue") 49plt.legend([loss,val_loss],["loss","val_loss"]) 50plt.show() 51#accuracyをグラフ化 52val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen") 53acc,=plt.plot(history.history["acc"],c="red") 54plt.legend([loss,val_acc],["acc","val_acc"]) 55plt.show() 56

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

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

python

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

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

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

python3

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

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

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

python3

1#l2_lossを定義 2def l2_loss(w): 3return 0.5 * np.sum(w ** 2) 4 5w1 = np.array([1.0, 2.0, 3.0]) 6w2 = np.array([4.0, 5.0, 6.0]) 7#aを欠損値とする 8a=3.0 9loss = a + l2_loss(w1) + l2_loss(w2) 10を設定しまして,中間層の正則化に自己で導入したパラメータを導入 11kernel_regularizer=l2_loss 12コード

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/06/15 14:15

なんとなくミスっているような気がするので、とりあえずコードをぜんぶ載せて頂いた方が良いかもしれません
yohehe

2018/06/15 14:27

返信ありがとうございます。プログラムデータについて加筆いたしました。
hayataka2049

2018/06/15 14:29

コードの部分にはmarkdownを使ってください。コードの部分を選択して<code>ボタンを押し、「ここに言語を入力」を「python」に書き換えれば良いです。あとはプレビューを見てちゃんと囲えているか確認
hayataka2049

2018/06/15 14:31

というか、けっこう省略が入っているみたいですが、普通に丸ごと載せて頂いた方が何をやっているのかわかりやすいです
yohehe

2018/06/15 14:44 編集

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

2018/06/15 15:01 編集

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

2018/06/15 15:05 編集

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

回答2

0

ベストアンサー

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

追記

python

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

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

python

1from sklearn.ensemble import RandomForestClassifier 2from sklearn.naive_bayes import GaussianNB 3from sklearn.model_selection import cross_validate 4 5# 以下4行は消す。消さないでこのコードだけ1つのファイルにまとめて書くと、digitsで動く 6from sklearn.datasets import load_digits 7digits = load_digits() 8X = digits.data # X=np.array(df)で作ったXになるように 9y = digits.target # y=np.array([0,1,1,1,1,...で作ったyになるように 10 11rfc = RandomForestClassifier(n_estimators=1000, n_jobs=-1) 12gnb = GaussianNB() 13 14for name, clf in zip(["RandomForest", "GaussianNB"], [rfc, gnb]): 15 d = cross_validate(clf, X, y, cv=4, scoring="accuracy", n_jobs=-1) 16 print(name) 17 print("accuracy:{:.5f}".format(d["test_score"].mean())) 18""" => こんな感じ 19RandomForest 20accuracy:0.94273 21GaussianNB 22accuracy:0.80866 23"""

投稿2018/06/15 15:29

編集2018/06/15 17:24
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohehe

2018/06/15 15:43

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

2018/06/15 15:44

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

2018/06/15 15:53

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

2018/06/15 16:00

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

2018/06/15 16:10

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

2018/06/15 16:20 編集

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

2018/06/15 16: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の設定などの難しさを実感しております。
mkgrei

2018/06/15 16:30

バッチサイズを減らして、学習率も減らすと良いかもしれません。 やるには'adam'ではなくoptimizerを渡さないといけないが…
yohehe

2018/06/15 16:31

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

2018/06/15 16:33 編集

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

2018/06/15 16:39

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

2018/06/15 16:42

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

2018/06/15 16:42

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

2018/06/15 16:47

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

2018/06/15 16:49

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

2018/06/15 16:57 編集

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

2018/06/15 17:03

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

2018/06/15 17:06 編集

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

2018/06/15 17:06

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

2018/06/15 17:12

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

2018/06/15 17:17

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

2018/06/15 17:19

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

2018/06/15 17:27

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

2018/06/15 17:33

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

2018/06/15 17:37

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

2018/06/15 18:01 編集

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

2018/06/15 18:05

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

2018/06/16 04:43

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

2018/06/16 05:30 編集

過学習の対策としては、ドロップアウトの他に ランダムで重みを決める時の標準偏差を下げる、 L2ノルムを使う、batch normalizationを使うなどが挙げられます。 感覚的にはこれくらいの規模であれば、ドロップアウトよりもL2ノルムの方が効果的な気がします。 kerasの使い方はわからないのですが、重みの推移を確認する方法があれば、確認してみるのもいいと思います。 重みの値が初期値よりも、部分的もしくは全体的に大きくなっていたら、過学習の可能性があります。 逆に重みの値が全体的に均一に保たれていたら、過学習以外が原因の可能性が高いです。
yohehe

2018/06/16 06:15

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

2018/06/16 07:37 編集

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

2018/06/16 08:18

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

2018/06/16 09: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については詳しくないので、間違っている可能性もあります。
yohehe

2018/06/17 11:01

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

2018/06/17 14:52

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

2018/06/18 04:59 編集

効果が出てよかったです。 後私の書いた関数は忘れてもらっても構いません。 あれは、l2ノルムがどういうものか?中でどういう処理をしているのか?というのを理解してもらえればいいなと思い書いただけで kerasの方で同じものが用意されていますし、 既に実装に成功しているようなので、私のコードをあえて使う必要はないです。 後L2とドロップアウトは併用可能ですので、一緒に入れておいてもいいと思います。 効果があるかどうかはわかりませんが、今回の場合とりあえず入れておいて損はないと思います
yohehe

2018/06/18 05:49

hayataka2049様、ありがとうございます。validiationspilitを下げるとval_accuracyがやや直線になってしまいましたが、predictの正答率は上がったという結果でした。それでも50%に届かないくらいでしたが。サンプルを増やすことが根本的な点でありそうなので増やしながらアドバイスを活かしてみます。 puroko3様、ありがとうございます。 l2ノルムによる正則化によるパラメータに条件を課すこととdropoutは併用可能なんですね。勉強になります。 組み合わせを試しながら最適な部分を探していってみようと思います。
guest

0

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

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

投稿2018/06/15 13:29

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohehe

2018/06/15 13:53 編集

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

2018/06/17 15:11

val_lossがうまく行っていそうなのに、val_accが0に沈んでいるのが若干気持ち悪いですね。 epoch数が多すぎるのもあるのですが… 差し支えなければデータの方を公開できませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問