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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

Q&A

解決済

1回答

499閲覧

python 正常な学習データを生成できない

kmll

総合スコア19

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/03/04 11:20

編集2019/03/04 12:04

Python 3.7 , windows10
この質問の前に、この下記処理後のコードに関する質問をしています。そこで発生するエラーはどうやらここでの処理で正常なファイルが生成されていないためだとご指摘いただきました。解決にご協力ください。

#犬猫見た目による学習/検証データの準備

from PIL import Image
import os, glob
import numpy as np
import random, math

#画像が保存されているルートディレクトリのパス
root_dir ="C:\Users\kmll\python_code\dog"

種類

categories = ["cat","dog"]

画像データ用配列

X = []

種類データ用配列

Y = []

#画像データごとにadd_sample()を呼び出し、X,Yの配列を返す関数
def make_sample(files):
global X, Y
X = []
Y = []
for cat, fname in files:
add_sample(cat, fname)
return np.array(X), np.array(Y)

#渡された画像データを読み込んでXに格納し、また、
#画像データに対応するcategoriesのidxをY格納する関数
def add_sample(cat, fname):
img = Image.open(fname)
img = img.convert("RGB")
img = img.resize((150, 150))
data = np.asarray(img)
X.append(data)
Y.append(cat)

#全データ格納用配列
allfiles = []

#カテゴリ配列の各値と、それに対応するidxを認識し、全データをallfilesにまとめる
for idx, cat in enumerate(categories):
image_dir = root_dir + "/" + cat
files = glob.glob(image_dir + "/*.jpg")
for f in files:
allfiles.append((idx, f))

#シャッフル後、学習データと検証データに分ける
random.shuffle(allfiles)
th = math.floor(len(allfiles) * 0.8)
train = allfiles[0:th]
test = allfiles[th:]
X_train, y_train = make_sample(train)
X_test, y_test = make_sample(test)
xy = (X_train, X_test, y_train, y_test)
#データを保存する
np.save("C:\Users\kmll\python_code\cat\tea_data.npy", xy)

python

1#犬猫見た目による学習/検証データの準備 2 3from PIL import Image 4import os, glob 5import numpy as np 6import random, math 7 8#画像が保存されているルートディレクトリのパス 9root_dir ="C:\Users\kmll\python_code\dog" 10# 種類 11categories = ["cat","dog"] 12 13# 画像データ用配列 14X = [] 15# 種類データ用配列 16Y = [] 17 18#画像データごとにadd_sample()を呼び出し、X,Yの配列を返す関数 19def make_sample(files): 20 global X, Y 21 X = [] 22 Y = [] 23 for cat, fname in files: 24 add_sample(cat, fname) 25 return np.array(X), np.array(Y) 26 27#渡された画像データを読み込んでXに格納し、また、 28#画像データに対応するcategoriesのidxをY格納する関数 29def add_sample(cat, fname): 30 img = Image.open(fname) 31 img = img.convert("RGB") 32 img = img.resize((150, 150)) 33 data = np.asarray(img) 34 X.append(data) 35 Y.append(cat) 36 37#全データ格納用配列 38allfiles = [] 39 40#カテゴリ配列の各値と、それに対応するidxを認識し、全データをallfilesにまとめる 41for idx, cat in enumerate(categories): 42 image_dir = root_dir + "/" + cat 43 files = glob.glob(image_dir + "/*.jpg") 44 for f in files: 45 allfiles.append((idx, f)) 46 47#シャッフル後、学習データと検証データに分ける 48random.shuffle(allfiles) 49th = math.floor(len(allfiles) * 0.8) 50train = allfiles[0:th] 51test = allfiles[th:] 52X_train, y_train = make_sample(train) 53X_test, y_test = make_sample(test) 54xy = (X_train, X_test, y_train, y_test) 55#データを保存する 56np.save("C:\Users\kmll\python_code\cat\tea_data.npy", xy)

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

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

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

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

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

y_waiwai

2019/03/04 11:42

このままではコードが見れないので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
kmll

2019/03/04 12:04

添付しました。
guest

回答1

0

ベストアンサー

def make_sample(files): global X, Y X = [] Y = [] for cat, fname in files: add_sample(cat, fname) return np.array(X), np.array(Y)

グローバル変数と同じ名前のローカル変数 X, Y を定義して、空のまま return しているのでこれはおかしいですよね。

上記については当方の勘違いでした。申し訳ありません。

投稿2019/03/04 15:07

編集2019/03/05 04:24
tiitoi

総合スコア21954

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

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

hayataka2049

2019/03/04 20:44 編集

global宣言ついてるのでX=[]とY=[]はグローバル変数への代入になります。add_sampleの中でX.append(data)とY.append(cat)してるときにグローバルスコープのX, Yのメソッドが呼ばれます。なので、空ではないでしょうけど、、、
kmll

2019/03/05 01:15

もう少し詳しくご教示いただけないでしょうか?
tiitoi

2019/03/05 04:25

hayataka2049 さん コメントありがとうございます。 ご指摘頂いたとおり、グローバルスコープの X, Y が呼ばれていたのでそこは問題ありませんでした。失礼しました。
tiitoi

2019/03/05 04:27

kmll さん 目視で確認できる範囲では問題なさそうなのですが、動かしてみないと見落とし等あるかもしれないので、 まずは最終的に保存される xy がどうなっているのか print してみましょう。 エラーが起こったときは目視で原因にきづければいいですが、そうでない場合はとくかく print で各変数を出力して想定どおりになっているかを1つ1つ確認してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問