Как я могу использовать выход функции извлечения в качестве входа нейронной сети? - PullRequest
0 голосов
/ 19 июня 2019

Я использую следующий код. Но у меня есть ошибка. Моя ошибка (строка 113 и т. Д.): Слой conv1d-2 был вызван со входом, который не является символическим тензором. полученный тип:. Полный ввод: [(115,26)]. все входы в слой должны быть тензорными.

или

не удалось передать входной массив из фигуры (115,26) в фигуру (115).

или ...

from pathlib import Path
from python_speech_features import fbank
import scipy.io.wavfile as wavfile
import numpy as np
#import csv
import itertools
from keras.models import Model
from keras import layers
import keras
import matplotlib.pyplot as plt



def plot_history(net_history):
    history = network_history.history
    losses = history['loss']
    val_losses = history['val_loss']
    accuracies = history['acc']
    val_accuracies = history['val_acc']
    plt.xlabel('Epochs')
    plt.ylabel('loss')
    plt.plot(losses)
    plt.plot(val_losses)
    plt.legend(['loss', 'val_loss'])

    plt.figure()
    plt.xlabel('Epochs')
    plt.ylabel('accuracy')
    plt.plot(accuracies)
    plt.plot(val_accuracies) 
    plt.legend(['acc', 'val_acc'])




path = Path('/home/narges/dataset/dataset-CV-16kHz-128kbps/train/').glob('**/*.wav')
wavs = [str(wavf) for wavf in path if wavf.is_file()]
wavs.sort()
#print(wavs)

number_of_files=len(wavs)



spk_ID = [wavs[i].split('/')[-1].lower() for i in range(number_of_files)]




for i in range(number_of_files):
    (rate, sig) = wavfile.read(wavs[i])



fbank_feat=fbank(sig, rate, winlen=0.060, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=rate/2, preemph=0.97, winfunc=np.hamming)
#print(fbank_feat)





out_feat = list(itertools.chain(fbank_feat))


feat1 = []
for x in out_feat:
    for y in x:
        feat1.append(y)


feat_vector = feat1[:115]
energy_of_frame = feat1[115:]





myinput = layers.Input(shape=(115,26)
conv1 = layers.Conv1D(16, 3, activation='relu', padding='same', strides=1)(myinput)
conv2 = layers.Conv1D(32, 3, activation='relu', padding='same', strides=1)(conv1)
flat = layers.Flatten()(conv2)
out_layer = layers.Dense(6, activation='softmax')(flat)

mymodel = Model(myinput, out_layer)
mymodel.summary()
mymodel.compile(optimizer=keras.optimizers.Adam(), loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])



network_history = mymodel.fit(np.array(feat_vector), batch_size=128, epochs=5, validation_split=0.2)
plot_history(network_history)
...