TensorFlow搭建Simple Neural Network训练XNOR门出现维度不兼容报错
报错原因
- 输入维度不匹配:你的训练输入
training_inputs每条样本包含3个特征,整体数据集形状为(8,3),但定义输入层时input_shape=[1]要求输入特征数为1,维度不匹配直接触发兼容性报错。 - 网络结构不适配任务:仅用单层无激活函数的全连接层是线性模型,无法拟合XNOR门的非线性逻辑,即便修正维度问题也无法得到正确的训练结果。
解决方案
修正后完整代码
import tensorflow as tf import numpy as np training_inputs = np.array([[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]],dtype=float) training_outputs = np.array([1,0,0,1,0,1,1,0],dtype=float) # 调整网络结构适配输入维度与非线性任务 model = tf.keras.Sequential([ tf.keras.layers.Dense(units=8, input_shape=[3], activation='relu'), tf.keras.layers.Dense(units=1, activation='sigmoid') ]) model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.01)) history = model.fit(training_inputs, training_outputs , epochs=1000, verbose=False) # 验证输出结果 print(model.predict(training_inputs, verbose=False).round())
核心改动说明
- 将输入层
input_shape从[1]修改为[3],匹配输入样本的3个特征,解决维度不匹配报错。 - 新增带
relu激活函数的隐藏层,引入非线性拟合能力,适配XNOR门的非线性逻辑。 - 输出层添加
sigmoid激活函数,将输出值限制在0-1区间,匹配二分类标注的取值范围。 - 适当调小学习率、增加训练轮次,保证模型可以充分收敛。
内容的提问来源于stack exchange,提问作者Parzival
相关产品推荐
相关产品推荐

