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

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

ただいまの
回答率

91.01%

  • Python

    5542questions

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

  • TensorFlow

    487questions

mnist for ML Beginnersについて

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 163

ruuruusann24

score 9

https://qiita.com/kkk3H/items/c3eb0d868170b29b0b87

こちらの記事を読ませていただいて自分も同じことをしてみたいと思ってやってみたのですが、うまく行きませんでした。
最初の
data = data_set.read_data_sets(one_hot=True)
でエラーが出てしまっていると思うのですがなぜエラーが出てしまうのかわかりません。
よろしくお願いします。

Jupyter Notebook
Python 3.6.4
TensorFlow 1.3.0
NumPy 1.13.3

import tensorflow as tf
import dataset

data = data_set.read_data_sets(one_hot=True)

x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 3])

W = tf.Variable(tf.zeros([784, 3]))
b = tf.Variable(tf.zeros([3]))

y = tf.nn.softmax(tf.matmul(x, W) + b)

cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for i in range(100):
    batch_xs, batch_ys = data.train.next_batch(10)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

sess.run(accuracy, feed_dict={x: data.test.images, y_: data.test.labels})
"data_set.py"
import numpy
from tensorflow.python.framework import dtypes
import collections

Datasets = collections.namedtuple('datasets', ['train', 'validation', 'test'])


def dense_to_one_hot(labels_dense, num_classes):
    num_labels = labels_dense.shape[0]
    index_offset = numpy.arange(num_labels) * num_classes
    labels_one_hot = numpy.zeros((num_labels, num_classes))
    labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1

    return labels_one_hot


class DataSet(object):

    def __init__(self,
                 images,
                 labels):

        self._images = images
        self._labels = labels
        self._num_examples = images.shape[0]
        self._epochs_completed = 0
        self._index_in_epoch = 0

        self._epoch_test = 0
        self._index_in_epoch_test = 0

    @property
    def images(self):
        return self._images

    @property
    def labels(self):
        return self._labels

    @property
    def num_examples(self):
        return self._num_examples

    @property
    def epochs_completed(self):
        return self._epochs_completed

    @property
    def epoch_test(self):
        return self._epoch_test

    def next_batch(self, batch_size, shuffle=True):
        start = self._index_in_epoch
        # Shuffle for the first epoch
        if self._epochs_completed == 0 and start == 0 and shuffle:
            perm0 = numpy.arange(self._num_examples)
            numpy.random.shuffle(perm0)
            self._images = self.images[perm0]
            self._labels = self.labels[perm0]
        # Go the the next epoch
        if start + batch_size > self._num_examples:
            # Finished epoch
            self._epochs_completed += 1
            # Get the rest examples in this epoch
            rest_num_examples = self._num_examples - start
            data_rest_part = self._images[start:self._num_examples]
            label_rest_part = self._labels[start:self._num_examples]
            # Shuffle the data
            if shuffle:
                perm = numpy.arange(self._num_examples)
                numpy.random.shuffle(perm)
                self._images = self.images[perm]
                self._labels = self.labels[perm]
            # Start next epoch
            start = 0
            self._index_in_epoch = batch_size - rest_num_examples
            end = self._index_in_epoch
            data_new_part = self._images[start:end]
            label_new_part = self._labels[start:end]

            return numpy.concatenate((data_rest_part, data_new_part), axis = 0), numpy.concatenate((label_rest_part, label_new_part), axis = 0)
        else:
            self._index_in_epoch += batch_size
            end = self._index_in_epoch
            return self._images[start:end], self._labels[start:end]

def read_data_sets(one_hot=False,
                   dtype=dtypes.float32,
                   reshape=True,
                   validation_size=1000,
                   test_size=500):
    """Construct a data set from a given directory path of the data"""

    images = numpy.load('./imgs.npy')
    labels = numpy.load('./labels.npy')

    if reshape:
        images = numpy.reshape(images, (-1, numpy.prod(images.shape[1:])))
    if one_hot:
        labels = dense_to_one_hot(labels, 3)

    validation_images = images[:validation_size]
    validation_labels = labels[:validation_size]
    test_images = images[validation_size:validation_size+test_size]
    test_labels = labels[validation_size:validation_size+test_size]
    train_images = images[validation_size+test_size:]
    train_labels = labels[validation_size+test_size:]

    train = DataSet(train_images,
                    train_labels)

    validation = DataSet(validation_images,
                         validation_labels)

    test = DataSet(test_images,
                   test_labels)

    return Datasets(train=train, validation=validation, test=test)


以下エラー文です

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~/anaconda3/envs/tf/lib/python3.6/site-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
     56     try:
---> 57         return getattr(obj, method)(*args, **kwds)
     58 

TypeError: 'numpy.float64' object cannot be interpreted as an integer

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-23-9ceed1aa7dd7> in <module>()
      2 import dataset
      3 
----> 4 data = data_set.read_data_sets(one_hot=True)

~/lab/data_set/data_set.py in read_data_sets(one_hot, dtype, reshape, validation_size, test_size)
     96 
     97     if reshape:
---> 98         images = numpy.reshape(images, (-1, numpy.prod(images.shape[1:])))
     99     if one_hot:
    100         labels = dense_to_one_hot(labels, 3)

~/anaconda3/envs/tf/lib/python3.6/site-packages/numpy/core/fromnumeric.py in reshape(a, newshape, order)
    230            [5, 6]])
    231     """
--> 232     return _wrapfunc(a, 'reshape', newshape, order=order)
    233 
    234 

~/anaconda3/envs/tf/lib/python3.6/site-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
     65     # a downstream library like 'pandas'.
     66     except (AttributeError, TypeError):
---> 67         return _wrapit(obj, method, *args, **kwds)
     68 
     69 

~/anaconda3/envs/tf/lib/python3.6/site-packages/numpy/core/fromnumeric.py in _wrapit(obj, method, *args, **kwds)
     45     except AttributeError:
     46         wrap = None
---> 47     result = getattr(asarray(obj), method)(*args, **kwds)
     48     if wrap:
     49         if not isinstance(result, mu.ndarray):

TypeError: 'numpy.float64' object cannot be interpreted as an integer
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

images = numpy.reshape(images, (-1, numpy.prod(images.shape[1:])))

Errorを見るとこの部分がおかしいんだと思います。
内容としては、numpy.reshapeの引数にはint型しか受け付けないようになっているのに、numpy.float64型が入っているからでしょう。images.shape[1:]の中身が分からないので何とも言えませんが、prodの計算でimage[1:]の中にfloat型が一つでも入っていたら返り値はnumpy.float64になるようなので、データの中身を洗ってみてはいかがでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/22 12:05

    回答ありがとうございます!確かにデータの中を調べてみたところデータがおかしかったです。解決しました!ありがとうございます!

    キャンセル

0

回答ありがとうございます!確かにデータの中を調べてみたところデータがおかしかったです。解決しました!ありがとうございます!

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 91.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Python

    5542questions

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

  • TensorFlow

    487questions