Python Andrew Ng的Tensorflow实现&x27;s cat与非cat示例(coursera)
在完成了一门基本的机器学习课程后,我试图用TensorFlow作为练习重现其中的一个例子。在最初的示例中,神经网络是从头开始构建的,我想用TensorFlow重现相同的神经网络。 我能够创建相同的层结构和激活功能,但结果不同。 使用原始代码,成本降低得慢得多,例如:Python Andrew Ng的Tensorflow实现&x27;s cat与非cat示例(coursera),python,tensorflow,machine-learning,neural-network,Python,Tensorflow,Machine Learning,Neural Network,在完成了一门基本的机器学习课程后,我试图用TensorFlow作为练习重现其中的一个例子。在最初的示例中,神经网络是从头开始构建的,我想用TensorFlow重现相同的神经网络。 我能够创建相同的层结构和激活功能,但结果不同。 使用原始代码,成本降低得慢得多,例如: 100纪元后:原始代码:0.67…,张量流:0.50 400纪元后:原始代码:0.57…,张量流:0.27 我知道这样更好,但我想了解差异的原因 我的代码: tf.random.set_seed(1) model =
- 100纪元后:原始代码:0.67…,张量流:0.50
- 400纪元后:原始代码:0.57…,张量流:0.27
tf.random.set_seed(1)
model = tf.keras.models.Sequential([
layers.Dense(20, activation = "relu"),
layers.Dense(7, activation = "relu"),
layers.Dense(5, activation = "relu"),
layers.Dense(1, activation = "sigmoid")
])
model.compile(
loss = keras.losses.BinaryCrossentropy(from_logits = False),
optimizer = keras.optimizers.SGD(learning_rate = 0.0075),
metrics = ["accuracy"]
)
model.fit(train_x, train_y, batch_size = 209, epochs = 500, verbose = 2) #batch_size = 209 = number of train examples, to have batch gradient descent
原始代码和数据集可在以下位置获得:
课程:Andrew Ng的“神经网络与深度学习” 示例:具有4层NN的cat与非cat分类器
我使用同样的方法:- 层和节点数
- 损失/成本(术语有点混乱):二进制交叉熵
- 无动量梯度下降(SGD)
- 学习率(0.0075)
- 批量梯度下降(批量大小=列车示例数)
- 随机种子
感谢您的帮助,提前谢谢 权重/偏差初始化是原因。 这是原始初始化:
W1 = np.random.randn(n_h, n_x) *0.01
b1 = np.zeros((n_h, 1))
W2 = np.random.randn(n_y, n_h) *0.01
b2 = np.zeros((n_y, 1))
您可以在Keras中实现自己的初始值设定项,并传递给您的模型
要在tensorflow中复制相同的初始化,请执行以下操作:
def my_init(shape, dtype=None):
np.random.seed(1)
a = np.random.randn(shape[0], shape[1])*0.01 # the same initialization as in the original code from coursera
return tf.convert_to_tensor(a, dtype = dtype) # converting the output to a tensor
将my_init添加到图层,例如:
layers.Dense(20, activation = "relu", kernel_initializer = my_init),