尝试为 2 个暗淡输入创建卷积层失败
Trying unsuccesfully to create a convolution layer to 2 dim input
我正在做关于第一学位研究的期末项目。简而言之,我正在使用 772 个训练声音文件,每个声音文件都有 327 个称为 mfcc 的声音特征系数,所以我的 x_training 输入是 - 772*327。
我问我推荐使用什么型号,我得到了答复 -
Try CNN on MFCC (add 4 or so CNN layers followed by Max Pooling) -> Flatten -> Dense Layers This is a very generic architecture that works for most tasks of this nature – Iordanis 2 days ago
所以我尝试使用 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,但它也没有用(只是将错误更改为 excepted 3d 而不是 4d)
有人知道我该怎么做...
抱歉我的英语不好,如果这是个愚蠢的问题,我很抱歉,我是 tensorflow 的新手:)
编辑:
我做了以下事情,但现在它写信给我:
TypeError:将形状转换为 TensorShape 时出错:int() 参数必须是字符串、类字节对象或数字,而不是 'tuple'
在致密层上
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: Input 0 of layer conv1d is incompatible with the layer:
expected ndim=3, found ndim=2. Full shape received: [None, 312]
由于您的训练数据只有一个特征维度,因此请使用 Conv1D
而不是 Conv2D
。然后你的输入有一个像 (?, x, 1)
这样的 3d 形状,其中第一个维度是批量大小,第二个是特征,最后一个包含值本身。
因此,首先尝试通过
重塑您的数据
x_train = x_train.reshape(np.append(x_train.shape, 1))
和 input_shape=(x_train.shape[1:])
应该可以正常工作。
请注意,之后您还必须将池化更改为 MaxPooling1D
!
我正在做关于第一学位研究的期末项目。简而言之,我正在使用 772 个训练声音文件,每个声音文件都有 327 个称为 mfcc 的声音特征系数,所以我的 x_training 输入是 - 772*327。
我问我推荐使用什么型号,我得到了答复 -
Try CNN on MFCC (add 4 or so CNN layers followed by Max Pooling) -> Flatten -> Dense Layers This is a very generic architecture that works for most tasks of this nature – Iordanis 2 days ago
所以我尝试使用 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,但它也没有用(只是将错误更改为 excepted 3d 而不是 4d)
有人知道我该怎么做...
抱歉我的英语不好,如果这是个愚蠢的问题,我很抱歉,我是 tensorflow 的新手:)
编辑:
我做了以下事情,但现在它写信给我:
TypeError:将形状转换为 TensorShape 时出错:int() 参数必须是字符串、类字节对象或数字,而不是 'tuple' 在致密层上
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: Input 0 of layer conv1d is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 312]
由于您的训练数据只有一个特征维度,因此请使用 Conv1D
而不是 Conv2D
。然后你的输入有一个像 (?, x, 1)
这样的 3d 形状,其中第一个维度是批量大小,第二个是特征,最后一个包含值本身。
因此,首先尝试通过
x_train = x_train.reshape(np.append(x_train.shape, 1))
和 input_shape=(x_train.shape[1:])
应该可以正常工作。
请注意,之后您还必须将池化更改为 MaxPooling1D
!