You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于深度学习的分子设计CNN模型SMILES输入准确率为0求助

分子设计CNN模型训练准确率为0的问题求助

本项目为基于深度学习技术的分子设计学术项目,采用SMILES作为输入的CNN模型,已完成输入编码,但训练后准确率始终为0,特此求助解决方法。

模型代码

from keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense,Dropout,Activation
import keras

print("TensorFlow version:", tf.__version__)
print("Keras version:", keras.__version__)

# 创建Sequential模型
model = Sequential()

# 添加1D卷积层,29个过滤器,核大小3,ReLU激活
model.add(Conv1D(filters=29, kernel_size=3, activation='relu', input_shape=(29, 1)))

# 添加最大池化层,池化大小1
model.add(MaxPooling1D(pool_size=1))

# 添加全连接层,64个单元,线性激活
model.add(Dense(units=64, activation='linear'))

# 输出层
model.add(Dense(1))
model.add(Activation('linear'))

# 编译模型
model.compile(loss='mape', optimizer='Adam', metrics=['accuracy',percentage_difference])

# 训练模型
model.fit(X_train, y_train, batch_size = 128, epochs=5, validation_data=(X_val, y_val))

训练结果

TensorFlow version: 2.11.0
Keras version: 2.11.0
Epoch 1/5
10501/10501 [==============================] - 72s 7ms/step - loss: 100.3061 - accuracy: 0.0000e+00 - percentage_difference: 100.3061 - val_loss: 100.0071 - val_accuracy: 0.0000e+00 - val_percentage_difference: 100.0071
Epoch 2/5
10501/10501 [==============================] - 85s 8ms/step - loss: 99.9942 - accuracy: 0.0000e+00 - percentage_difference: 99.9941 - val_loss: 100.4263 - val_accuracy: 0.0000e+00 - val_percentage_difference: 100.4262
Epoch 3/5
10501/10501 [==============================] - 80s 8ms/step - loss: 99.9968 - accuracy: 0.0000e+00 - percentage_difference: 99.9968 - val_loss: 100.1386 - val_accuracy: 0.0000e+00 - val_percentage_difference: 100.1386
Epoch 4/5
10501/10501 [==============================] - 76s 7ms/step - loss: 100.0059 - accuracy: 0.0000e+00 - percentage_difference: 100.0059 - val_loss: 99.9903 - val_accuracy: 0.0000e+00 - val_percentage_difference: 99.9903
Epoch 5/5
10501/10501 [==============================] - 71s 7ms/step - loss: 100.0111 - accuracy: 0.0000e+00 - percentage_difference: 100.0111 - val_loss: 100.0600 - val_accuracy: 0.0000e+00 - val_percentage_difference: 100.0599

问题分析与解决建议

  • 任务与指标不匹配:你用了分类任务的accuracy指标,但输出层是线性激活、损失函数为mape,说明这是回归任务。回归任务中模型输出是连续值,无法用准确率衡量,因此准确率始终为0是正常现象。建议将指标替换为回归任务适用的mse、mae,移除accuracy。
  • 池化层无效:MaxPooling1D(pool_size=1)不会改变特征维度,相当于没有池化。建议调整为pool_size=2,真正实现降维提取关键特征。
  • 模型结构缺失:卷积层输出是三维张量,直接接入全连接层会导致维度不兼容,必须添加model.add(Flatten())将卷积输出展平为一维后,再输入到Dense层。同时全连接层用linear激活缺少非线性表达能力,建议换成relu。
  • 损失函数优化:mape在目标值接近0时会出现数值不稳定,可考虑改用mse(均方误差)或mae(平均绝对误差)作为损失函数,更适配多数回归场景。
  • 输入编码与数据归一化:确认SMILES的编码是否正确(如one-hot编码、长度统一为29);回归任务必须对输入和标签数据做归一化/标准化处理,避免数值范围差异导致模型难以收敛。

内容的提问来源于stack exchange,提问作者Abir b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:25:11