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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Q&A

0回答

514閲覧

データセットのコード作成

syosinnsya88

総合スコア0

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

0グッド

0クリップ

投稿2021/07/23 00:33

編集2021/07/23 14:09
ここに言語を入力```import os, pickle import numpy as np from PIL import Image from sklearn.model_selection import train_test_split class DigitImage: def __init__(self): self.dataset = {} def load_data(self, save_file, normalize=True, flatten=False, one_hot_label=True): # save_fileがなければデータセットを作成, あればデータを読み込む if not os.path.exists(save_file): self.create_dataset(save_file) else: with open(save_file, 'rb') as f: self.dataset = pickle.load(f) if normalize: # float32に変換して0~1の間になるよう正規化 self.dataset['img'] = self.dataset['img'].astype(np.float32) / 255 if not flatten: self.dataset['img'] = self.dataset['img'].reshape(-1, 1, 28, 28) if one_hot_label: self.dataset['label'] = self.change_one_hot_label() return self.dataset['img'], self.dataset['label'] def change_one_hot_label(self): T = np.zeros((self.dataset['label'].size, 10)) for idx, row in enumerate(T): row[self.dataset['label'][idx]] = 1 return T def create_dataset(self, save_file): image, label = [], [] for i in range(10): dir_path = os.path.join('dataset', str(i)) filelist = [os.path.join(dir_path, file) for file in os.listdir(dir_path)] # ファイル毎に画像を1次元のnumpy配列として追加していく images = [] for file in filelist: _img = Image.open(file).convert('L') _img = _img.resize((28, 28)) _img = np.asarray(_img, dtype=np.uint8).reshape(-1) images.append(_img) image.extend(images) label.extend([i] * len(filelist)) self.dataset = {'img': np.array(image), 'label': np.array(label)} with open(save_file, 'wb') as f: pickle.dump(self.dataset, f) if __name__ == '__main__': digit = DigitImage() X, y = digit.load_data('digit_dataset.pkl', normalize=True, flatten=False, one_hot_label=True) print(X.shape) print(y.shape) # ここでロードしたデータを学習用とテスト用に分割. シャッフルもされる X_train, X_test, y_train, y_test = train_test_split( X.reshape((len(X), 28, 28, 1)), y, train_size=0.6) print(y_train[:10]) digit = DigitImage() X, y = digit.load_data('digit_dataset.pkl', normalize=True, flatten=False, one_hot_label=True) print(X.shape) # (10000, 1, 28, 28) print(y.shape) # (10000, 10) コード ``` ``` コード ```### 前提・実現したいこと 自作データセットをコード一行で読み込めるようにしたいです。 プログラム初心者で全くわからない状況なのでおかしいことたくさん言っていると思います。すみません ここに質問の内容を詳しく書いてください。 import os, pickle import numpy as np from PIL import Image from sklearn.model_selection import train_test_split class DigitImage: def __init__(self): self.dataset = {} def load_data(self, save_file, normalize=True, flatten=False, one_hot_label=True): # save_fileがなければデータセットを作成, あればデータを読み込む if not os.path.exists(save_file): self.create_dataset(save_file) else: with open(save_file, 'rb') as f: self.dataset = pickle.load(f) if normalize: # float32に変換して0~1の間になるよう正規化 self.dataset['img'] = self.dataset['img'].astype(np.float32) / 255 if not flatten: self.dataset['img'] = self.dataset['img'].reshape(-1, 1, 28, 28) if one_hot_label: self.dataset['label'] = self.change_one_hot_label() return self.dataset['img'], self.dataset['label'] def change_one_hot_label(self): T = np.zeros((self.dataset['label'].size, 10)) for idx, row in enumerate(T): row[self.dataset['label'][idx]] = 1 return T def create_dataset(self, save_file): image, label = [], [] for i in range(10): dir_path = os.path.join('dataset', str(i)) filelist = [os.path.join(dir_path, file) for file in os.listdir(dir_path)] # ファイル毎に画像を1次元のnumpy配列として追加していく images = [] for file in filelist: _img = Image.open(file).convert('L') _img = _img.resize((28, 28)) _img = np.asarray(_img, dtype=np.uint8).reshape(-1) images.append(_img) image.extend(images) label.extend([i] * len(filelist)) self.dataset = {'img': np.array(image), 'label': np.array(label)} with open(save_file, 'wb') as f: pickle.dump(self.dataset, f) if __name__ == '__main__': digit = DigitImage() X, y = digit.load_data('digit_dataset.pkl', normalize=True, flatten=False, one_hot_label=True) print(X.shape) print(y.shape) # ここでロードしたデータを学習用とテスト用に分割. シャッフルもされる X_train, X_test, y_train, y_test = train_test_split( X.reshape((len(X), 28, 28, 1)), y, train_size=0.6) print(y_train[:10]) digit = DigitImage() X, y = digit.load_data('digit_dataset.pkl', normalize=True, flatten=False, one_hot_label=True) print(X.shape) # (10000, 1, 28, 28) print(y.shape) # (10000, 10) ### 発生している問題・エラーメッセージ このプログラムを実行するとファイルが作成されるのですが中身が文字化けしてしまいます。 ### 試したこと 文字コードを変換するサイトを使用しました。 ここに問題に対して試したことを記載してください。 それでも文字化けします。 ここにより詳細な情報を記載してください。 https://www.yakupro.info/entry/digit-dataset このサイトを参考にしています。

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

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

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

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

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

odataiki

2021/07/23 08:00

ソースコードは<code>(コードの挿入)を使ってその中に記述するよう、 質問文を編集した方がより沢山回答を得られると思います。 現状ですとソースコードが読みにくく、 解析しようとコピペして、段落つけて読みやすくして・・・など 解析までに手間がかける状態になっており、 別の質問を回答したくなる人が多いと思いますので
syosinnsya88

2021/07/23 14:11

ありがとうございます 一応やってみたのですがまた直す点があれば教えてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問