【发布时间】:2020-03-25 18:24:04
【问题描述】:
我正在完成我的第一个学位研究的期末项目。简而言之,我正在使用 772 个训练声音文件,每个声音文件都有 327 个声音特征系数,称为 mfcc,所以我的 x_training 输入是 - 772*327。
我问我推荐使用什么型号,我得到了答复 -
在 MFCC 上尝试 CNN(添加 4 个左右的 CNN 层,然后是 Max Pooling)-> Flatten -> Dense Layers 这是一个非常通用的架构,适用于这种性质的大多数任务 – Iordanis 2 天前
所以我尝试使用 tensorflow 创建它 -
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters=64, kernel_size=3, activation='relu', input_shape=(x_train.shape[1:])),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(32, activation='relu')
])
(整数值是完全随机的)
当 x_train.shape[1:] 为 327 时(每个声音文件中 mfcc 系数的数量)
但不幸的是它对我不起作用,它写道 -
ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None,
312]
我尝试将抽搐层降低到 1D,但它也不起作用(只是将错误更改为例外 3d 而不是 4d)
有人知道我该怎么办...
对不起我的英语,如果是愚蠢的问题,我很抱歉,我对 tensorflow 很陌生 :)
编辑:
我做了以下事情,但现在写给我:
TypeError:将形状转换为 TensorShape 时出错:int() 参数必须是字符串、类似字节的对象或数字,而不是“元组” 在密集层上
x_train.reshape((-1, 1)) x_test.reshape((-1, 1)) model = tf.keras.models.Sequential([ tf.keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(x_train.shape[1:], 1)), tf.keras.layers.MaxPooling1D(pool_size=2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(32, activation='relu'),
我也做到了:
x_train.reshape((-1, 1)) x_test.reshape((-1, 1)) model = tf.keras.models.Sequential([ tf.keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(x_train.shape[1:])), tf.keras.layers.MaxPooling1D(pool_size=2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(32, activation='relu'),
但之前得到了错误 -
ValueError: 层 conv1d 的输入 0 与层不兼容: 预期 ndim=3,发现 ndim=2。收到的完整形状:[无,312]
【问题讨论】:
标签: tensorflow keras neural-network conv-neural-network mfcc