【发布时间】:2022-01-18 13:59:06
【问题描述】:
我正在编写一个神经网络以将 Mel 频率系数作为输入,然后运行模型。我的数据集包含 100 个样本 - 每个样本是一个由 12 个值组成的数组,对应于系数。将这些数据拆分为训练集和测试集后,我创建了对应于数组的 X 输入和对应于标签的 y 输入。
Data array containing the coefficients
这是我的数据的一个小样本,其中包含 X_train 数组中的 5 个元素:
['[107.59366 -14.153783 24.799461 -8.244417 20.95272\n -4.375943 12.77285 -0.92922235 3.9418116 7.3581047\n -0.30066165 5.441765]] '[ 96.49664 2.0689797 21.557552 -32.827045 7.348135 -23.513977\n 7.9406714 -16.218931 10.594619 -21.4381 0.5903044 -10.569035 ]' '[105.98041 -2.0483367 12.276348 -27.334534 6.8239 -23.019623\n 7.5176797 -21.884727 11.349695 -22.734652 3.0335162 -11.142375]' (7.73094559E + 00 6.72225571C + 00 -2.74525508E-02 \ n 6.60858080 + 00 1.96265772S-01 1.9626486080-01 1.962657720-01 1.962657720-01 1.962657720-01 1.962657720-01-1.962657720-01-1.962657720-01 1.962657720-01-3.94725770 + 9.422394286S + 00 1.214320660 + 9.42320690 + 9.214320660 + 9.214320662 + 9.21432066 -01 2.44894314e+00]']
当我创建神经网络时,我想使用 12 个系数作为网络的输入。为此,我需要使用包含这些数组的 X_train 数据集的每一行作为输入。但是,当我尝试将数组索引视为输入时,它会在尝试拟合模型时出现形状错误。我的模型如下:
def build_model_graph():
model = Sequential()
model.add(Input(shape=(12,)))
model.add(Dense(12))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('relu'))
model.add(Dense(num_labels))
model.add(Activation('softmax'))
# Compile the model
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
return model
在这里,我想使用 X_train 数组的每一行作为对应于 shape(12,) 的输入。当我使用这样的东西时:
num_epochs = 50
num_batch_size = 32
model.fit(x_train, y_train, batch_size=num_batch_size, epochs=num_epochs,
validation_data=(x_test, y_test), verbose=1)
我得到一个对我来说有意义的形状错误。 供参考,报错如下:
ValueError: Exception encountered when calling layer "sequential_20" (type Sequential).
Input 0 of layer "dense_54" is incompatible with the layer: expected min_ndim=2, found ndim=1. Full shape received: (None,)
但我不确定如何提取 X_train 的每个索引处存在的 12 个系数的数组,然后在模型输入中使用它。索引 x_train 和 y_train 也不起作用。如果有人能指出我的相关方向,那将非常有帮助。谢谢!
编辑:我的数据框代码如下:
clapdf = pd.read_csv("clapsdf.csv")
clapdf.drop('Unnamed: 0', inplace=True, axis=1)
clapdf.head()
nonclapdf = pd.read_csv("nonclapsdf.csv")
nonclapdf.drop('Unnamed: 0', inplace=True, axis=1)
sound_df = clapdf.append(nonclapdf)
sound_df.head()
d=sound_data.tolist()
df=pd.DataFrame(data=d)
data = df[0].to_numpy()
print("Before-->", data.shape)
dat = np.array([np.array(d) for d in data])
print('After-->', dat.shape)
在这里,形状保持不变,因为 80 个样本中的每一个的值不是以逗号分隔的格式,而是以系列的形式。
【问题讨论】:
-
发布一些数据的小样本,以使错误可复制
-
如果数据是字符串且元素由空格分隔,则可以按空格拆分,然后将每个元素转换为整数
-
你能确认你的元素类型是字符串吗?如果没有,您使用 type(sample) 得到哪种类型
-
我认为问题出在 y_train - 因为 x_train 包含数值,但 y_train 是描述样本标签的字符串。
标签: python arrays tensorflow deep-learning neural-network