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

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

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

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

Python

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

Q&A

解決済

1回答

781閲覧

PythonディープラーニングにおけるMNISTのデータ読み込みについて

diddy

総合スコア9

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/03/06 06:33

前提・実現したいこと

私は参考書「詳解 ディープラーニング, 巣籠 悠輔 著」を用いて学習している者です。今回実現したいことはPythonで深層学習の実装をtensorflowで行い、その際ニューラルネットワークのモデルの予測精度を比較する上で用いられるベンチマークテスト用のデータセットに、MNISTというものがありますが、そのデータを読み込んで実装していきたい。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "deep_tanh.py", line 13, in <module> mnist = datasets.fetch_mldata('MNIST original', data_home='.') : : TimeoutError: [WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした 。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

該当のソースコード

Python

1import numpy as np 2import tensorflow as tf 3from sklearn import datasets 4from sklearn.model_selection import train_test_split 5from sklearn.utils import shuffle 6 7np.random.seed(0) 8tf.set_random_seed(123) 9 10''' 11データの生成 12''' 13mnist = datasets.fetch_mldata('MNIST original', data_home='.') 14 15n = len(mnist.data) 16N = 10000 # MNISTの一部を使う 17train_size = 0.8 18indices = np.random.permutation(range(n))[:N] # ランダムにN枚を選択 19 20X = mnist.data[indices] 21y = mnist.target[indices] 22Y = np.eye(10)[y.astype(int)] # 1-of-K 表現に変換 23 24X_train, X_test, Y_train, Y_test =\ 25 train_test_split(X, Y, train_size=train_size) 26 27''' 28モデル設定 29''' 30n_in = len(X[0]) # 784 31n_hidden = 200 32n_out = len(Y[0]) # 10 33 34x = tf.placeholder(tf.float32, shape=[None, n_in]) 35t = tf.placeholder(tf.float32, shape=[None, n_out]) 36 37# 入力層 - 隠れ層 38W0 = tf.Variable(tf.truncated_normal([n_in, n_hidden], stddev=0.1)) 39b0 = tf.Variable(tf.zeros([n_hidden])) 40h0 = tf.nn.tanh(tf.matmul(x, W0) + b0) 41 42# 隠れ層 - 隠れ層 43W1 = tf.Variable(tf.truncated_normal([n_hidden, n_hidden], stddev=0.1)) 44b1 = tf.Variable(tf.zeros([n_hidden])) 45h1 = tf.nn.tanh(tf.matmul(h0, W1) + b1) 46 47W2 = tf.Variable(tf.truncated_normal([n_hidden, n_hidden], stddev=0.1)) 48b2 = tf.Variable(tf.zeros([n_hidden])) 49h2 = tf.nn.tanh(tf.matmul(h1, W2) + b2) 50 51W3 = tf.Variable(tf.truncated_normal([n_hidden, n_hidden], stddev=0.1)) 52b3 = tf.Variable(tf.zeros([n_hidden])) 53h3 = tf.nn.tanh(tf.matmul(h2, W3) + b3) 54 55# 隠れ層 - 出力層 56W4 = tf.Variable(tf.truncated_normal([n_hidden, n_out], stddev=0.1)) 57b4 = tf.Variable(tf.zeros([n_out])) 58y = tf.nn.softmax(tf.matmul(h3, W4) + b4) 59 60cross_entropy = tf.reduce_mean(-tf.reduce_sum(t * tf.log(y), axis=1)) 61train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 62 63correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1)) 64accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 65 66''' 67モデル学習 68''' 69epochs = 100 70batch_size = 200 71 72init = tf.global_variables_initializer() 73sess = tf.Session() 74sess.run(init) 75 76n_batches = (int)(N * train_size) // batch_size 77 78for epoch in range(epochs): 79 X_, Y_ = shuffle(X_train, Y_train) 80 81 for i in range(n_batches): 82 start = i * batch_size 83 end = start + batch_size 84 85 sess.run(train_step, feed_dict={ 86 x: X_[start:end], 87 t: Y_[start:end] 88 }) 89 90 # 訓練データに対する学習の進み具合を出力 91 loss = cross_entropy.eval(session=sess, feed_dict={ 92 x: X_, 93 t: Y_ 94 }) 95 acc = accuracy.eval(session=sess, feed_dict={ 96 x: X_, 97 t: Y_ 98 }) 99 print('epoch:', epoch, ' loss:', loss, ' accuracy:', acc) 100 101''' 102予測精度の評価 103''' 104accuracy_rate = accuracy.eval(session=sess, feed_dict={ 105 x: X_test, 106 t: Y_test 107}) 108print('accuracy: ', accuracy_rate) 109

試したこと

ニューラルネットワークの実装自体は上手くできているはずだが、問題は"データの生成"部分に記述した
mnist = datasets.fetch_mldata('MNIST original', data_home='.')
にある。
ここでfetch_mldataはhttp://mldata.org/にホストされているデータをダウンロードしているが、このサイトが何かしらの原因でサーバーエラーを起こしているためデータの取得ができない。
しかし同じデータを持つファイルが別にあり(既にダウンロード済み)、それをmldataディレクトリに置くと実行できるそうだが、やり方がよく分からない。

補足情報(FW/ツールのバージョンなど)

参考書の詳細
https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-TensorFlow%E3%83%BBKeras%E3%81%AB%E3%82%88%E3%82%8B%E6%99%82%E7%B3%BB%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86-%E5%B7%A3%E7%B1%A0-%E6%82%A0%E8%BC%94/dp/4839962510?pd_rd_w=1r1nz&pf_rd_p=2e4a0572-cc5f-46f1-8099-783c809a2f93&pf_rd_r=GTT4NN6EQE1XY5S8N8VV&pd_rd_r=1ae66035-8511-49e0-8543-2035ddfa5a31&pd_rd_wg=2gqhb&ref_=pd_gw_bmx

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく MNIST のダウンロード先がサーバーダウンしているのだと思うので、代わりに以下で取得してください。

python

1from tensorflow.keras.datasets import mnist 2 3(x_train, y_train), (x_test, y_test) = mnist.load_data() 4print('x_train.shape: {}, y_train.shape: {}'.format(x_train.shape, y_train.shape)) 5print('x_test.shape: {}, y_test.shape: {}'.format(x_test.shape, y_test.shape)) 6# x_train.shape: (60000, 28, 28), y_train.shape: (60000,) 7# x_test.shape: (10000, 28, 28), y_test.shape: (10000,)

投稿2019/03/06 06:47

tiitoi

総合スコア21956

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

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

diddy

2019/03/06 14:59

回答ありがとうございますm(_ _)m ご指摘された通り動かしてみましたが、今度はこのようなerror文が出てきました。現在対策中ですが、何かご存知であれば教えていただければ幸いですm(_ _)mm(_ _)m Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 11s 1us/step x_train.shape: (60000, 28, 28), y_train.shape: (60000,) x_test.shape: (10000, 28, 28), y_test.shape: (10000,) ''' エラー文 ''' Traceback (most recent call last): File "deep_tanh.py", line 20, in <module> n = len(mnist.data) AttributeError: module 'tensorflow._api.v1.keras.datasets.mnist' has no attribute 'data'
tiitoi

2019/03/06 15:03

datasets.fetch_mldata() を使った場合とデータの格納形式が少し違うので多少修正が必要ですが、自力でやるのは難しそうでしょうか?
diddy

2019/03/07 07:12

動作するコードを載せてくださり非常に助かりましたm(_ _)m 自力で訂正するのは少々難しかったです。機械学習についてはまだまだ経験不足な面もあってこちらで質問させていただきました。 丁寧な解説ありがとうございすm(_ _)mm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問