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

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

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

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

Python

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

Q&A

解決済

1回答

8576閲覧

FileNotFoundError: [Errno 2] No such file or directory

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

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

Python

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

0グッド

0クリップ

投稿2017/05/20 13:32

編集2017/05/20 13:38

FileNotFoundError: [Errno 2] No such file or directory: 'learning_sample/1_3_8.wav'
とエラーが出ました。

#coding:utf-8 from sklearn import svm from sklearn.metrics import classification_report,accuracy_score import sys from mfcc import * import glob import csv import random import itertools import numpy as np if __name__ =="__main__": bell_nums = range(1,6) pairs = list(itertools.combinations(bell_nums,2)) for pair in pairs: bell_num1=int(pair[0]) bell_num2 = int(pair[1]) train_data = np.empty((0,12),float) train_label = np.array([]) test_data = np.empty((0,12),float) test_label = np.array([]) noise_nums = list(range(1,12)) level_nums = list(range(0,10)) random.shuffle(noise_nums) nfft=2048 # FFTのサンプル数 nceps = 12 # MFCCの次元数 # 鈴の音1 for noise_nums_index in noise_nums[0:10]: random.shuffle(level_nums) files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num1,noise_nums_index,random.choice(level_nums))) for file_name in files_name: feature = get_feature(files_name,nfft,nceps) if len(train_data) ==0: train_data=feature else: train_data=np.vstack((train_data,feature)) train_label=np.append(train_label,bell_num1) # テストデータを作成 files_name="learning_sample/%d_%d_%d.wav"% (bell_num1,noise_nums_index,level_nums[8]) feature = get_feature(files_name,nfft,nceps) if len(test_data) ==0: test_data=feature else: test_data=np.vstack((test_data,feature)) #テストと結果を合わせる test_label=np.append(test_label,bell_num1) # 鈴の音2 for noise_nums in noise_nums[0:10]: random.shuffle(level_nums) for level_nums in level_nums[0:10]: files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num2, noise_num, level_num)) for file_name in files_name: feature = get_feature(files_name,nfft,nceps) if len(train_data) == 0: train_data=feature else: train_data=np.vstack((train_data,feature)) train_label=np.append(train_label,bell_num2) file_name = "learning_sample/%d_%d_%d.wav" % (bell_num2, noise_num, level_nums[8]) feature = get_feature(files_name,nfft,nceps) if len(test_data) == 0: test_data=feature else: test_data=np.vstack((test_data,feature)) test_label=np.append(test_label,bell_num2) feature_train_data=np.hstack((train_label.reshape(len(train_label),1),train_data)) feature_test_data=np.hstack((test_label.reshape(len(test_label),1),test_data)) with open("feature_data/train_data.txt","w") as f: writer=csv.writer(f) writer.writerows(feature_train_data) with open("feature_data/test_data.txt","w") as f: writer=csv.writer(f) writer.writerows(feature_train_data) #識別機学習 clf = svm.SVC() clf.fit(train_data,train_label) test_pred =clf.predict(test_data) # print np.hstack((test_label.reshape(len(test_label),1),(test_pred.reshape(len(test_pred),1)))) score=accuracy_score(test_label,test_pred) print(pair,score)

とコードを書いて実行したところ、

Traceback (most recent call last): File "sound.py", line 60, in <module> feature = get_feature(files_name,nfft,nceps) File "/Users/XXX/Desktop/onsei/mfcc.py", line 126, in get_feature wav,fs = wavread(wavfile) File "/Users/XXX/Desktop/onsei/mfcc.py", line 17, in wavread wf = wave.open(filename,"r") File "/Users/XXX/anaconda/envs/py36/lib/python3.6/wave.py", line 499, in open return Wave_read(f) File "/Users/XXX/anaconda/envs/py36/lib/python3.6/wave.py", line 159, in __init__ f = builtins.open(f, 'rb') FileNotFoundError: [Errno 2] No such file or directory: 'learning_sample/1_3_8.wav'

とエラーが出ました。
確かに、test(このアプリケーションの名前)アプリの中のlearning_sampleファイルに1_3_8.wavファイルはありません。しかし、
おそらく以下の部分を実行したときにエラーが出たと思うのですが、

for noise_nums_index in noise_nums[0:10]: random.shuffle(level_nums) # 学習用データを作成 # スライス (記法はリストと同じ、返り値はビュー) # a[start:end:step] files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num1,noise_nums_index,random.choice(level_nums))) for file_name in files_name: feature = get_feature(files_name,nfft,nceps) #len(train_data) ==0ならtrain_data=feature??? if len(train_data) ==0: train_data=feature else: #train_dataとfeatureを縦で合わせたものがtrain_data train_data=np.vstack((train_data,feature)) train_label=np.append(train_label,bell_num1) # テストデータを作成 files_name="learning_sample/%d_%d_%d.wav"% (bell_num1,noise_nums_index,level_nums[8]) feature = get_feature(files_name,nfft,nceps) if len(test_data) ==0: test_data=feature else: test_data=np.vstack((test_data,feature)) #テストと結果を合わせる test_label=np.append(test_label,bell_num1)

ここの部分が呼ばれると、学習用データが作成されると思っていました。なので、あらかじめファイルを用意する必要はないなと。私の認識が間違っているのでしょうか?私は自動的に学習ファイルが作成されるコードを書きたかったのですが。どこをどう直せば良いのでしょうか?

参考にしたページは
http://webdatareport.hatenablog.com/entry/2016/11/06/161304
です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく以下の部分を実行したときにエラーが出たと思うのですが、

推測する必要はありません。スタックトレースから場所は明らかです。

ここの部分が呼ばれると、学習用データが作成されると思っていました。

get_featureのスタックトレースを見れば「read binaryモードでファイルをオープン」しようとしていることは明らかです。

コードをざっと眺めた程度で不確かな推測をしようとしてないでしょうか?

コードをざっと眺めて「こうかな」と推測してトライするってことは悪くはないです。そういうことはよくあります。しかし、そうしたとして期待通りの動きでなかったならやるべきことは「どうすればいいか聞くことではなく」「中のコードが一行一行何をしているかが分かるぐらいにサンプルの内容を深く把握する」ことです。

質問者さんにとってはありがたくないアドバイスかも知れませんが、「プログラムコードの内容を読む練習をすること」をお勧めします。

投稿2017/05/25 02:29

KSwordOfHaste

総合スコア18394

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問