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

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

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

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

0回答

410閲覧

python 画像処理

hglkmnlkygmnl

総合スコア6

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2019/10/03 03:00

編集2019/10/18 06:43
import numpy as np import pandas as pd import cv2 from chainer.datasets import tuple_dataset from random import getrandbits #学習に関する基本情報の定義 NUM_SHAPE = 48 #画像一辺の長さ TRAIN_DATA_SIZE_MAG = 2 #水増しで元のデータサイズの何倍の量まで増やすか #Csvファイルから画像とラベルを読み込む def dataFromCsv(csvfile): data = pd.read_csv(csvfile,delimiter=',') train_data = data[data['Usage']=='Training'] publictest_data = data[data['Usage']=='PublicTest'] privatetest_data = data[data['Usage']=='PrivateTest'] #1行のデータを画像のカタチにする(画像枚数、1、縦、横) train_x = pixelsToArray_x(train_data) publictest_x = pixelsToArray_x(publictest_data) privatetest_x = pixelsToArray_x(privatetest_data) #ラベルは["neutral","happiness","surprise","sadness","anger","disgust","fear","contempt","unknown,NA"] #NA以外をyに入れる #各画像へのラベルは合計10になるので、10で割って0-1にする train_y = np.array(train_data.iloc[:,2:11],dtype=np.float32)/10 publictest_y = np.array(publictest_data.iloc[:,2:11],dtype=np.float32)/10 privatetest_y = np.array(privatetest_data.iloc[:,2:11],dtype=np.float32)/10 #水増し train_x,train_y = augmentation(train_x,train_y) #tuple化 train = tuple_dataset.TupleDataset(train_x,train_y) publictest = tuple_dataset.TupleDataset(publictest_x,publictest_y) privatetest = tuple_dataset.TupleDataset(privatetest_x,privatetest_y) return train,publictest,privatetest #水増し(holizontal Flip,Scale augmentation) def augmentation(x_array,y_array,train_data_size_mag = TRAIN_DATA_SIZE_MAG): #データ変換の処理4つ #関数が適用されるかはランダム def normalization(img): return (img - np.mean(img))/np.std(img) def gausianNoise(img): MEAN = 0 SIGMA = 15 gaussfilter = np.random.normal(MEAN,SIGMA,(img.shape)) return img + gaussfilter def holizontalFlip(img): return img[:,::-1] def scaleAugmentation(img): SCALE_MIN = 50 SCALE_MAX = 80 #拡大処理、入力された画像サイズ48*48に対して、50*50~80*80まで拡大 SCALE_SIZE = np.random.randint(SCALE_MIN,SCALE_MAX) #リサイズ scale_img = cv2.resize(img,(SCALE_SIZE,SCALE_SIZE)) top = np.random.randint(0,SCALE_SIZE-NUM_SHAPE) left = np.random.randint(0,SCALE_SIZE-NUM_SHAPE) bottom = top + NUM_SHAPE right = left + NUM_SHAPE return scale_img[top:bottom,left:right] def activateAugmentFforArray(f,x_array,activateP): #変換用関数fを画像に適用させるかどうかをランダムに決める def randActivateF(f,img): if np.random.rand()>activateP: return img return f(img) imglist = [] #x_arrayは[データ数,色数,縦,横]なので2回ループして画像毎の関数を(ランダムに)適用 for imgC in x_array: imglist.append([randActivateF(f,img) for img in imgC]) return np.array(imglist) #変換処理対象データをtrain_data_size_mag-1用意(1セットは元の画像にするため-1) changed_x_array = np.concatenate([x_array]*(train_data_size_mag-1),axis=0) #変換の種類ごとにactivateAugmentFforArrayを適用して、画像の変換(もしくは無変換)を行う changed_x_array = activateAugmentFforArray(normalization,changed_x_array,0.2) changed_x_array = activateAugmentFforArray(gausianNoise,changed_x_array,0.2) changed_x_array = activateAugmentFforArray(holizontalFlip,changed_x_array,1) changed_x_array = activateAugmentFforArray(scaleAugmentation,changed_x_array,0.2) return np.concatenate([x_array,changed_x_array],axis=0).astype(np.float32),np.concatenate([y_array]*train_data_size_mag,axis=0) #1行のデータを画像の形にする def pixelsToArray_x(data): np_x = np.array([np.fromstring(image,np.float32,sep=' ')/255 for image in np.array(data['pixels'])]) np_x.shape =(np_x.shape[0],1,NUM_SHAPE,NUM_SHAPE) return np_x コード

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

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

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

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

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

t_obara

2019/10/03 04:10

エラーの通り、データの中にヘッダーと思われる文字情報が含まれているからではないでしょうか。 コードが見にくいので```で囲ってください。
hglkmnlkygmnl

2019/10/03 04:23

使い慣れていないので大きくなっていた文字の#を消しました。 csvファイルのUsageの列のTrainingやPrivatetestなどを読み込ませたいのですが...
meg_

2019/10/03 11:01

・コードは「コードの挿入」で記入してください。 ・CSVファイルの中身は画像データなのですか?
hglkmnlkygmnl

2019/10/03 14:24

画像のようにemotion, pixels, Usageがあり、それぞれの列に値があります。
meg_

2019/10/03 23:18

「train_data」の中身が文字列になってませんか?それでエラーになっているかと思います。
hglkmnlkygmnl

2019/10/03 23:21

train_dataの中身は"Usage"="training"のときのdataではないですか?どうすればよいでしょうか?
t_obara

2019/10/18 07:49

インデントもキチンと整形してソースを提示してください。 csvの内容もすべてでなくて良いので、見せられる範囲でご提示ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問