我是机器学习的新手,我正在尝试在keras中实现每个时间步分类器。目前,我有45个6秒音频片段的样本,我进行一些特征提取并将每个时间步对齐到一个二进制类(0或1)。我的形状如下:
X_train.shape = (45,259,768)
Y_train.shape = (45,259,1)
我的0数远高于我的1数,因此我使用sklearn和compute_sample_weights来获取每个时间步长和形状为以下每个样本的采样权重矩阵:
sample_weights.shape = (45,259)
这是我的模特:
epochs = 25
model = Sequential()
model.add(Bidirectional(LSTM(units=25,input_shape=(259,768),return_sequences=True)))
model.add(Bidirectional(LSTM(units=25,return_sequences=True)))
model.add(TimeDistributed(Dense(2, activation='sigmoid')))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',sample_weight_mode="temporal",
metrics=['categorical_accuracy','binary_accuracy','mse','mae'])
model.fit(x=X_train,y=Y_train,epochs=epochs,batch_size=512,validation_split=0.3,sample_weight=sample_weights)
但是,我一直收到错误消息:
ValueError:找到了形状为(45,259)的sample_weight数组。为了 要使用按时间逐步分配的样本权重,您应指定 在compile()中为sample_weight_mode =“ temporal”。如果你只是想使用 按样本权重,请确保您的sample_weight数组为1D。
有人对此有解决办法吗?如您所见,我已经指定了sample_weight_mode ='temporal',并且我相信自己的形状是正确的,但不确定。