Keras:精度不变,验证精度保持0

2024-07-01 08:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的ML模型需要预测一行MNIST像素值和MFCC声波值是否引用相同的数字(0到9)。我们有一个布尔数组,其中包含True和False,表示MNIST行和Audio行中的数字是否相同。在

我们为MNIST图像建立一个CNN,为音频文件建立一个RNN。该模型的输出是串联的,最后用sigmoid激活添加一个节点为1的致密层。如果数据引用相同的数字,则期望的输出为True;如果数据引用的不是相同的数字,则输出为False。在

然而,我们的训练准确率一直徘徊在50%左右,我们的验证准确率在许多时期都保持在0.0000。我似乎找不到解决这个问题的办法。我的代码如下:

inputCNN = tf.keras.Input(shape=(28, 28, 1))
CNN = tf.keras.layers.Conv2D(32, (3,3), activation='relu')(inputCNN)
CNN = tf.keras.layers.MaxPooling2D(2,2)(CNN)
CNN = tf.keras.layers.Conv2D(64, (3,3), activation='relu')(CNN)
CNN = tf.keras.layers.MaxPooling2D(2,2)(CNN)
CNN = tf.keras.layers.Conv2D(64, (3,3), activation='relu')(CNN)
CNN = tf.keras.layers.Flatten()(CNN)
CNN = tf.keras.layers.Dense(64, activation='relu')(CNN)
CNN = tf.keras.layers.Dense(10, activation='softmax')(CNN)
modelCNN = tf.keras.Model(inputs=inputCNN, outputs=CNN)

inputRNN = tf.keras.Input(shape=(93,13))
RNN = tf.keras.layers.LSTM(128,return_sequences=True)(inputRNN)
RNN = tf.keras.layers.Dropout(0.2)(RNN)
RNN = tf.keras.layers.LSTM(128)(RNN)
RNN = tf.keras.layers.Dropout(0.2)(RNN)
RNN = tf.keras.layers.Dense(64, activation='relu')(RNN)
RNN = tf.keras.layers.Dense(10, activation='softmax')(RNN)
modelRNN = tf.keras.Model(inputs=inputRNN, outputs=RNN)
# print(modelRNN.summary())

""" now combine the layers """
combined = tf.keras.layers.concatenate([modelRNN.output, modelCNN.output])

final_dense = tf.keras.layers.Dense(1, activation='sigmoid')(combined)

final_model = tf.keras.Model(inputs=[modelCNN.input, modelRNN.input], outputs=final_dense)

final_model.compile(optimizer='adam',
                    loss='binary_crossentropy',
                    metrics=['accuracy'])



final_model.fit([MNIST_traincopy, RNN_traincopy], booleanarray, validation_split = 0.1, epochs= 20, batch_size=32)

modelsummary如下所示:

^{pr2}$

Tags: truelayerstf数字activationcnnkerasdense

热门问题