2017-10-12 9 views
0

として解釈することができない次のコードは、tensorflowにおける特徴のマトリックスを作成するためにオーディオファイルを使用する:Pythonの例外TypeError:「フロート」オブジェクトインデックス

import tensorflow as tf 

directory = "audio_dataset/*.wav" 

filenames = tf.train.match_filenames_once(directory) 

init = (tf.global_variables_initializer(), tf.local_variables_initializer()) 

count_num_files = tf.size(filenames) 
filename_queue = tf.train.string_input_producer(filenames) 
reader = tf.WholeFileReader() 
filename, file_contents = reader.read(filename_queue) 

with tf.Session() as sess: 
    sess.run(init) 
    num_files = sess.run(count_num_files) 

    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    for i in range(num_files): 
     audio_file = sess.run(filename) 
     print(audio_file) 

これは、時間から周波数領域にオーディオを変換ツールキット:

from bregman.suite import * 


chromo = tf.placeholder(tf.float32) 
max_freqs = tf.argmax(chromo, 0) 


def get_next_chromogram(sess): 
    audio_file = sess.run(filename) 
    F = Chromagram(audio_file, nfft=16384, wfft=8192, nhop=2205) 
    return F.X 


def extract_feature_vector(sess, chromo_data): 
    num_features, num_samples = np.shape(chromo_data) 
    freq_vals = sess.run(max_freqs, feed_dict={chromo: chromo_data}) 
    hist, bins = np.histogram(freq_vals, bins=range(num_features + 1)) 
    return hist.astype(float)/num_samples 


def get_dataset(sess): 
    num_files = sess.run(count_num_files) 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 
    xs = [] 
    for _ in range(num_files): 
     chromo_data = get_next_chromogram(sess) 
     x = [extract_feature_vector(sess, chromo_data)] 
     x = np.matrix(x) 
     if len(xs) == 0: 
      xs = x 
     else: 
      xs = np.vstack((xs, x)) 
    return xs 

この2つの重心の周りのデータをクラスタ化:

k = 2 
max_iterations = 100 

def initial_cluster_centroids(X, k): 
    return X[0:k, :] 

def assign_cluster(X, centroids): 
    expanded_vectors = tf.expand_dims(X, 0) 
    expanded_centroids = tf.expand_dims(centroids, 1) 
    distances = tf.reduce_sum(tf.square(tf.subtract(expanded_vectors, expanded_centroids)), 2) 
    mins = tf.argmin(distances, 0) 
    return mins 

def recompute_centroids(X, Y): 
    sums = tf.unsorted_segment_sum(X, Y, k) 
    counts = tf.unsorted_segment_sum(tf.ones_like(X), Y, k) 
    return sums/counts 

with tf.Session() as sess: 
    sess.run(init) 
    X = get_dataset(sess) 
    centroids = initial_cluster_centroids(X, k) 
    i, converged = 0, False 
    while not converged and i < max_iterations: 
     i += 1 
     Y = assign_cluster(X, centroids) 
     centroids = sess.run(recompute_centroids(X, Y)) 
    print(centroids) 

しかし、イムは、次のトレースバックを得る:

Traceback (most recent call last): 
    File "components.py", line 776, in <module> 
    X = get_dataset(sess) 
    File "ccomponents.py", line 745, in get_dataset 
    chromo_data = get_next_chromogram(sess) 
    File "coffee_components.py", line 728, in get_next_chromogram 
    F = Chromagram(audio_file, nfft=16384, wfft=8192, nhop=2205) 
    File "/Volumes/Dados/Documents/Education/Programming/Machine Learning/Manning/book/BregmanToolkit-master/bregman/features.py", line 143, in __init__ 
    Features.__init__(self, arg, feature_params) 
    File "/Volumes/Dados/Documents/Education/Programming/Machine Learning/Manning/book/BregmanToolkit-master/bregman/features_base.py", line 70, in __init__ 
    self.extract() 
    File "/Volumes/Dados/Documents/Education/Programming/Machine Learning/Manning/book/BregmanToolkit-master/bregman/features_base.py", line 213, in extract 
    self.extract_funs.get(f, self._extract_error)() 
    File "/Volumes/Dados/Documents/Education/Programming/Machine Learning/Manning/book/BregmanToolkit-master/bregman/features_base.py", line 711, in _chroma 
    if not self._cqft(): 
    File "/Volumes/Dados/Documents/Education/Programming/Machine Learning/Manning/book/BregmanToolkit-master/bregman/features_base.py", line 588, in _cqft 
    self._make_log_freq_map() 
    File "/Volumes/Dados/Documents/Education/Programming/Machine Learning/Manning/book/BregmanToolkit-master/bregman/features_base.py", line 353, in _make_log_freq_map 
    mxnorm = P.empty(self._cqtN) # Normalization coefficients   
TypeError: 'float' object cannot be interpreted as an index 

私に関する限り、rangeintないfloatです。

ここでエラーを教えていただけますか?

+0

「レンジ」はどこですか?それはスタックトレースにはありません。これは 'X = get_dataset(sess)'行について不平を言っているようです。 – Antimony

+0

はい、 'get_dataset(sess)'は、( 'range()')を使った反復を伴う関数です(上を参照)。通常、このエラーは 'range 'の中に' float'を使用しているという事実を指しますが、私はここでは分かりません。 – outkast

+0

おそらく、 'audio_file'の値が' get_next_chromogram() 'にあることを確認できますか?それは 'Chromagram()'に渡される唯一の非整数です。 – Antimony

答えて

1

問題は、あなたは、Python 3を使用しているということですが、ブレグマンToolkitは、エラーがthis lineから来ているのPython 2に書かれていた:

mxnorm = P.empty(self._cqtN) 

self._cqtNfloatです。 Pythonの2では、pylabライブラリは、入力としてフロートを受け入れる:

pylab.empty(5.0) 
__main__:1: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future 
array([ 0., 0., 0., 0., 0.]) 

あなたがそうであるようにしかし、Pythonの3に同じエラーを取得:

pylab.empty(5.0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'float' object cannot be interpreted as an integer 

あなただけのことで、このエラーを修正することができるはずです私は上記のリンク先ファイルの行を編集し、int型にキャスト:他のエラーが発生しなかった場合

mxnorm = P.empty(int(self._cqtN)) 

をしかし、私は互換性がないバージョンに驚かれることと思います。 Python 2を試したり、Bregman Toolkitの代替案を探してみてください。

+0

私は理解しません。私はそのために 'Python 2.X'の環境環境を使用しています。それは問題ではありません。 – outkast

関連する問題