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

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

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

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

Q&A

1回答

2644閲覧

Python3 AttributeError: 'tuple' object has no attribute 'reshape'エラーの解決方法

SuzuAya

総合スコア71

Python 3.x

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

0グッド

0クリップ

投稿2019/05/17 12:21

編集2019/05/17 13:40

前提・実現したいこと

3万枚の画像をnumpy配列に変換するところでメモリエラーが起きてしまうため、tfrecordsを使って動かしてみることにしました。
以下のリンクを参考に、訓練画像の用意をしているところでエラーが出てしまいました。
お手数をお掛けしますが、エラー解消方法についてアドバイスをいただけますと幸いです。どうぞよろしくお願いいたします。
https://taka5hi.hatenablog.com/entry/2019/01/13/120145

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

AttributeError Traceback (most recent call last) <ipython-input-5-6f952036eb77> in <module> 37 # 訓練データの加工と保存 38 #train_labels = to_categorical(y_train) ---> 39 save_to_tfrecord(x_train, "train.tfrecord")# train_labels, <ipython-input-5-6f952036eb77> in save_to_tfrecord(datas, filename) 5 with tf.python_io.TFRecordWriter(filename) as w: 6 for data in zip(datas):#, labels):# , label ----> 7 data = data.reshape(-1).tobytes() 8 features = tf.train.Features(feature={ 9 'data': tf.train.Feature(bytes_list=tf.train.BytesList(value=[data]))}) AttributeError: 'tuple' object has no attribute 'reshape'

該当のソースコード

from __future__ import absolute_import from __future__ import division from __future__ import print_function from keras.layers import Lambda, Input, Dense from keras.models import Model from keras.models import Sequential, model_from_json from keras.losses import mse, binary_crossentropy from keras.layers import Conv2D, Flatten, Lambda from keras.layers import Reshape, Conv2DTranspose from keras.utils import plot_model, np_utils from keras.utils import plot_model from keras.callbacks import Callback, EarlyStopping, ModelCheckpoint,CSVLogger from keras import optimizers from keras import backend as K from keras.preprocessing.image import array_to_img, img_to_array,load_img #from keras.preprocessing.image import ImageDataGenerator import numpy as np import matplotlib.pyplot as plt import argparse import os import re import glob import random as rn import tensorflow as tf #import cv2 #import easydict from PIL import Image #from google.colab.patches import cv2_imshow import warnings warnings.filterwarnings('ignore') %matplotlib inline BATCH_SIZE = 500 EPOCHS = 5 def save_to_tfrecord(datas, filename):# labels, with tf.python_io.TFRecordWriter(filename) as w: for data in zip(datas):#, labels):# , label data = data.reshape(-1).tobytes() features = tf.train.Features(feature={ 'data': tf.train.Feature(bytes_list=tf.train.BytesList(value=[data]))}) #'label': tf.train.Feature(int64_list=tf.train.Int64List(value=label.astype(dtype='int64'))) example = tf.train.Example(features=features) w.write(example.SerializeToString()) # MNIST データのロード #(x_train, y_train), _ = mnist.load_data() #original dataset #train filenames = glob.glob("./train/NORMAL_train_dataset/*.jpeg") image_list = [] for filename in filenames: if filename == "Thumbs.db": continue image_value = np.array(Image.open(filename)) image_list.append(image_value.reshape(1, image_value.size)) x_train = np.asarray(image_list) print(x_train.shape) # 訓練データの加工と保存 #train_labels = to_categorical(y_train) save_to_tfrecord(x_train, "train.tfrecord")# train_labels,

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

ラベル無しのオリジナルデータセットを利用予定です。
ubuntuで、anacondaの仮想環境下で実行しています。

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

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

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

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

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

guest

回答1

0

for data in zip(datas):#, labels):# , label data = data.reshape(-1).tobytes()

zipはタプルという構造体を返すので、dataがnumpy.arrayになっていないのが問題ではないでしょうか?

以下に変更するとうまく行きませんか?

for data, label in zip(datas, labels):# , label data = data.reshape(-1).tobytes()

追記

ラベルがないのであれば、以下のようにしてみてはいかがでしょうか。

for data in datas:

投稿2019/05/17 13:14

編集2019/05/18 14:23
mkgrei

総合スコア8560

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

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

SuzuAya

2019/05/17 14:07

ご回答ありがとうございます!ラベル無しのデータセットで実装しており、def save_to_tfrecord(datas, filename):の部分でもlabelについて定義していないため、ご提案頂いたコードに変更してもうまくいきませんでした…。
SuzuAya

2019/05/19 12:28

追記ありがとうございました!自分でもそのようにやってみたのですが、エラーは消えませんでした。tfrecordについてもう少し時間をかけて勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問