Я использую следующий код. Но у меня есть ошибка. Моя ошибка (строка 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)