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

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

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

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

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1522閲覧

詳解ディープラーニングで紹介してる線形と非線形のプロットがうまくいきません

junnnn

総合スコア17

Keras

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

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/21 09:38

編集2018/06/21 10:17

お世話になります。

タイトルのように詳解ディープラーニングに載っているp117の(3.76)の式を解いてもうまく分類直線を引くことができません。次に分類直線の求め方がイメージがつかない為、非線形の引き方もうまくいきません。このような問題はどのようにして解くのでしょうか?どうか教えください。

全体のコードです。

python

1 2import numpy as np 3import tensorflow as tf 4from sklearn.utils import shuffle 5import matplotlib.pyplot as plt 6import matplotlib.animation as animation 7%matplotlib notebook 8 9np.random.seed(0) 10tf.set_random_seed(0) 11 12M = 2 # 入力データの次元 13K = 3 # クラス数 14n = 100 # クラスごとのデータ数 15N = n * K # 全データ数 16 17X1 = np.random.randn(n, M) + np.array([0, 10]) 18X2 = np.random.randn(n, M) + np.array([5, 5]) 19X3 = np.random.randn(n, M) + np.array([10, 0]) 20Y1 = np.array([[1, 0, 0] for i in range(n)]) 21Y2 = np.array([[0, 1, 0] for i in range(n)]) 22Y3 = np.array([[0, 0, 1] for i in range(n)]) 23 24X = np.concatenate((X1, X2, X3), axis=0) 25Y = np.concatenate((Y1, Y2, Y3), axis=0) 26 27W = tf.Variable(tf.zeros([M, K])) 28b = tf.Variable(tf.zeros([K])) 29 30x = tf.placeholder(tf.float32, shape=[None, M]) 31t = tf.placeholder(tf.float32, shape=[None, K]) 32y = tf.nn.softmax(tf.matmul(x, W) + b) 33 34cross_entropy = tf.reduce_mean(-tf.reduce_sum(t * tf.log(y), axis=1)) 35train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy) 36 37correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1)) 38 39init = tf.global_variables_initializer() 40sess = tf.Session() 41sess.run(init) 42 43batch_size = 50 # ミニバッチサイズ 44n_batches = N // batch_size 45 46for epoch in range(20): 47 48 X_, Y_ = shuffle(X, Y) 49 50 for i in range(n_batches): 51 start = i * batch_size 52 end = start + batch_size 53 54 sess.run(train_step, feed_dict={ 55 x: X_[start:end], 56 t: Y_[start:end] 57 }) 58 59X_, Y_ = shuffle(X, Y) 60 61classified = correct_prediction.eval(session=sess, feed_dict={ 62 x: X_[0:10], 63 t: Y_[0:10] 64}) 65prob = y.eval(session=sess, feed_dict={ 66 x: X_[0:10] 67}) 68 69W1 = sess.run(W) 70B1 = sess.run(b) 71 72plt.plot(X1[:,0], X1[:, 1], 'o') 73plt.plot(X2[:,0], X2[:, 1], '^') 74plt.plot(X3[:,0], X3[:, 1], '*') 75

クラス1とクラス2の分類直線を求めるしき、

W11X1 + W12X2 + b1 = W21X1 + W22X2 + b2  (3.76) です。

宜しくお願いしたします。

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

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

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

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

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

hayataka2049

2018/06/21 09:45

コードが見づらいので、質問の編集画面を開き、コード部分を選択して<code>ボタンを押し、「ここに言語を入力」を「python」に書き換えてください
junnnn

2018/06/21 10:18

コードの修正を致しました。宜しくお願い致します。
guest

回答1

0

ベストアンサー

とりあえず投下してみます。

python

1import numpy as np 2import tensorflow as tf 3from sklearn.utils import shuffle 4import matplotlib.pyplot as plt 5import matplotlib.animation as animation 6 7np.random.seed(0) 8tf.set_random_seed(0) 9 10M = 2 # 入力データの次元 11K = 3 # クラス数 12n = 100 # クラスごとのデータ数 13N = n * K # 全データ数 14 15X1 = np.random.randn(n, M) + np.array([0, 10]) 16X2 = np.random.randn(n, M) + np.array([5, 5]) 17X3 = np.random.randn(n, M) + np.array([10, 0]) 18Y1 = np.array([[1, 0, 0] for i in range(n)]) 19Y2 = np.array([[0, 1, 0] for i in range(n)]) 20Y3 = np.array([[0, 0, 1] for i in range(n)]) 21 22X = np.concatenate((X1, X2, X3), axis=0) 23Y = np.concatenate((Y1, Y2, Y3), axis=0) 24print(X.shape) 25 26W = tf.Variable(tf.zeros([M, K])) 27b = tf.Variable(tf.zeros([K])) 28 29x = tf.placeholder(tf.float32, shape=[None, M]) 30t = tf.placeholder(tf.float32, shape=[None, K]) 31y = tf.nn.softmax(tf.matmul(x, W) + b) 32 33cross_entropy = tf.reduce_mean(-tf.reduce_sum(t * tf.log(y), axis=1)) 34train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy) 35 36correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1)) 37 38init = tf.global_variables_initializer() 39sess = tf.Session() 40sess.run(init) 41 42batch_size = 50 # ミニバッチサイズ 43n_batches = N // batch_size 44 45for epoch in range(20): 46 47 X_, Y_ = shuffle(X, Y) 48 49 for i in range(n_batches): 50 start = i * batch_size 51 end = start + batch_size 52 53 sess.run(train_step, feed_dict={ 54 x: X_[start:end], 55 t: Y_[start:end] 56 }) 57 58X_, Y_ = shuffle(X, Y) 59 60classified = correct_prediction.eval(session=sess, feed_dict={ 61 x: X_[0:10], 62 t: Y_[0:10] 63}) 64prob = y.eval(session=sess, feed_dict={ 65 x: X_[0:10] 66}) 67 68W1 = sess.run(W) 69B1 = sess.run(b) 70 71def gen_y(W1, B1): 72 W11, W21, W12, W22 = list(W1.ravel()) 73 B1, B2 = list(B1) 74 def y(x): 75 return ((W11-W21)*x - (B1-B2)) / (W22 - W12) 76 return y 77y = gen_y(W1[:, :2], B1[:2]) 78 79plt.plot(X1[:,0], X1[:, 1], 'o') 80plt.plot(X2[:,0], X2[:, 1], '^') 81plt.plot(X3[:,0], X3[:, 1], '*') 82plt.xlim((X[:, 0].min(), X[:, 0].max())) 83plt.ylim((X[:, 1].min(), X[:, 1].max())) 84plt.plot([-2, 12], [y(-2), y(12)]) 85plt.show()

投稿2018/06/21 11:34

mkgrei

総合スコア8560

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

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

junnnn

2018/06/22 00:40

ご回答有難う御座います。 うまく直線を引くことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問