2017-10-12 3 views
0

Der folgende Code verwendet Audiodateien eine Matrix von Funktionen in tensorflow zu schaffen interpretiert werden:Python Typeerror: ‚schweben‘ Objekt nicht als Index

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) 

dies ein Toolkit, das von Zeit zu Frequenzbereichsaudio umwandelt :

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 

diese Clustern die Daten um zwei Schwerpunkte:

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) 

aber ich bin die folgende Zurückverfolgungs bekommen:

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 

so weit es mich betrifft, range ist ein int und kein float.

Könnte mir bitte jemand den Fehler hier zeigen?

+0

Wo ist 'Bereich'? Es ist nicht im Stack-Trace enthalten. Das scheint sich über die Zeile "X = get_dataset (sess)" zu beklagen. – Antimony

+0

ja, und 'get_dataset (sess)' wiederum ist eine Funktion (so) mit einer Iteration mit ('range()'). Normalerweise bezieht sich dieser Fehler auf die Tatsache, dass Sie einen 'float' innerhalb' range' verwenden, aber ich bin mir nicht sicher. – outkast

+0

Vielleicht können Sie überprüfen, welchen Wert 'audio_file' in' get_next_chromogram() 'hat? Das ist die einzige Nicht-Ganzzahl, die an 'Chromagram()' übergeben wird. – Antimony

Antwort

1

Das Problem ist, dass Sie Python verwenden 3, aber das Bregman Toolkit wurde in Python 2. Der Fehler kommt von this line geschrieben:

mxnorm = P.empty(self._cqtN) 

self._cqtN ist ein float. In Python 2, nimmt die pylab Bibliothek Schwimmern als Eingang:

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.]) 

jedoch in Python 3 Sie die gleichen Fehler wie Sie selbst:

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

Sie sollen diese Fehler zu beheben, indem Sie nur in der Lage sein, Bearbeiten der Zeile in der Datei, die ich oben verlinkt und es in einen int Stimmen:

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

Allerdings würde ich überrascht, wenn es irgendwelche anderen Fehler zu den inkompatiblen Versionen aufgrund nicht waren. Vielleicht möchten Sie Python 2 ausprobieren oder nach einer Alternative zum Bregman Toolkit suchen.

+0

Ich verstehe nicht. Ich benutze dafür eine 'Python 2.X'-Conda-Umgebung. Das sollte kein Problem sein. – outkast

Verwandte Themen