我正在通过在笔记本上构建自己的神经网络来练习神经网络。我正在尝试根据 Keras 中的等效模型检查我的模型。我的模型似乎与其他简单编码神经网络框架的工作方式相同,例如这个:https://towardsdatascience.com/coding-neural-network-forward-propagation-and-backpropagtion-ccf8cf369f76
但是,随着我增加纪元数,Keras 模型的权重慢慢偏离我的模型。我正在尝试使用简单的梯度下降来训练网络,批量大小等于整个训练集,将初始化权重设置为与模型中的初始化权重相同。 (我现在一直在 Iris 数据集上执行此操作,因此批量大小 = 150。)
Keras 中是否发生了一些默认情况,这意味着我在下面描述的模型的功能与我的模型(或文章中描述的模型)略有不同?比如批量归一化之类的?
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Input
network_shape = np.array([4, 20, 10, 1])
activations = ["relu", "relu", "sigmoid"]
model = Sequential()
model.add(Input(shape=(network_shape[0],)))
for i in range(len(activations)):
model.add(Dense(units=network_shape[i + 1], activation=activations[i]))
model.set_weights(set_weights)
sgd = keras.optimizers.SGD(learning_rate=alpha, momentum=0.0)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X.T, y.T, batch_size=150, epochs=n_iter, verbose=0, shuffle=False)
如果您想训练与本文中的模型相同的模型,则需要相同的初始权重和超参数。除非您正在学习一个非常简单的模型,例如
y= mx + b
,否则一旦您的轮数超过示例模型,权重将不会相同。