XOR Tensorflow不收敛

约翰·亚当斯

这是XOR的简单Tensorflow实现。

知道为什么当TF随机种子为0时,它不会收敛,而当它不是时,它会收敛吗?如何在不更改网络体系结构的情况下使其收敛(即,将隐藏层保持为Dense(2))并保持随机种子= 0?TIA!

import tensorflow as tf
import numpy as np
from tensorflow.keras import Model
from tensorflow.keras.layers import (
    Dense,
    Input,
)

tf.random.set_seed(0) # to reproduce non-convergence
# tf.random.set_seed(1234) # to converges

# XOR
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], "float32")
Y = np.array([[0], [1], [1], [0]], "float32")

x = Input(shape=(2,))
y = Dense(2, activation="sigmoid")(x)
y = Dense(1, activation="sigmoid")(y)
model = Model(inputs=x, outputs=y)
model.compile(loss="mean_squared_error")

class logger(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs=None):
        if epoch % 1000 == 0:
            print("epoch=", epoch, "loss=%.3f" % logs["loss"])

model.fit(X, Y, epochs=20000, verbose=0, callbacks=[logger()])

当随机种子= 0时输出:

epoch= 0 loss=0.255
epoch= 1000 loss=0.235
epoch= 2000 loss=0.190
epoch= 3000 loss=0.154
epoch= 4000 loss=0.137
epoch= 5000 loss=0.130
epoch= 6000 loss=0.127
epoch= 7000 loss=0.126
epoch= 8000 loss=0.125
epoch= 9000 loss=0.125
epoch= 10000 loss=0.125
epoch= 11000 loss=0.125
epoch= 12000 loss=0.125
epoch= 13000 loss=0.125
epoch= 14000 loss=0.125
epoch= 15000 loss=0.125
epoch= 16000 loss=0.125
epoch= 17000 loss=0.125
epoch= 18000 loss=0.125
epoch= 19000 loss=0.125

当随机种子= 1234时输出:

epoch= 0 loss=0.275
epoch= 1000 loss=0.234
epoch= 2000 loss=0.186
epoch= 3000 loss=0.118
epoch= 4000 loss=0.059
epoch= 5000 loss=0.024
epoch= 6000 loss=0.008
epoch= 7000 loss=0.003
epoch= 8000 loss=0.001
epoch= 9000 loss=0.000
epoch= 10000 loss=0.000
epoch= 11000 loss=0.000
epoch= 12000 loss=0.000
epoch= 13000 loss=0.000
epoch= 14000 loss=0.000
epoch= 15000 loss=0.000
epoch= 16000 loss=0.000
epoch= 17000 loss=0.000
epoch= 18000 loss=0.000
epoch= 19000 loss=0.000
尼古拉斯·格维斯(Nicolas Gervais)

默认情况下(由于尚未指定),优化器为"rmsprop",看来此任务执行不佳。原因是:我不知道。但是如果你使用"sgd""tanh"激活的隐藏层,它将工作:

model.compile(loss="mean_squared_error", optimizer='sgd')
epoch= 0 loss=0.425
epoch= 1000 loss=0.213
epoch= 2000 loss=0.182
epoch= 3000 loss=0.160
epoch= 4000 loss=0.130
epoch= 5000 loss=0.063
epoch= 6000 loss=0.023
epoch= 7000 loss=0.010
epoch= 8000 loss=0.006
epoch= 9000 loss=0.004

您也可以尝试手动设置权重;)

step_activation = lambda x: tf.cast(tf.greater_equal(x, 0.5), tf.float32)

x = Input(shape=(2,))
y = Dense(2, activation=step_activation)(x)
y = Dense(1, activation=step_activation)(y)
model = Model(inputs=x, outputs=y, trainable=False)
model.compile(loss="mean_squared_error")

weights = [np.array([[1, 1], [1, 1]]),
           np.array([-1.5, -0.5]),
           np.array([[-1], [1]]),
           np.array([-0.5])]


model.set_weights(weights)

model.evaluate(X, Y)
1/1 [==============================] - 0s 2ms/step - loss: 0.0000e+00

复制/可粘贴:

import tensorflow as tf

tf.random.set_seed(0)

X = [[0, 0], [0, 1], [1, 0], [1, 1]]
Y = [[0], [1], [1], [0]]

x = tf.keras.layers.Input(shape=(2,))
y = tf.keras.layers.Dense(2, activation="tanh")(x)
y = tf.keras.layers.Dense(1, activation="tanh")(y)
model = tf.keras.Model(inputs=x, outputs=y)
model.compile(loss="mean_squared_error", optimizer='sgd')

history = model.fit(X, Y, epochs=5000)
Epoch 5000/5000
1/1 [==============================] - 0s 998us/step - loss: 0.0630

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SOR方法不收敛

来自分类Dev

sklearn上的套索不收敛

来自分类Dev

损失不收敛Caffe回归

来自分类Dev

TensorFlow MLP不训练XOR

来自分类Dev

为什么XOR函数的这种变体不总是收敛?

来自分类Dev

XOR神经网络误差始终收敛到0.5

来自分类Dev

为什么XOR函数的这种变体不总是收敛?

来自分类Dev

反向传播实现不与 XOR 数据集收敛

来自分类Dev

Python sklearn:oneclassSVM 永不收敛

来自分类Dev

神经网络的误差不收敛

来自分类Dev

2 层神经网络不收敛

来自分类Dev

TensorFlow XOR NN eval 函数错误

来自分类Dev

递归Haskell;牛顿法:为什么不收敛?

来自分类Dev

scipy.optimize.minimize()不收敛,给出成功= False

来自分类Dev

自举逻辑模型-一些子集不收敛

来自分类Dev

为什么我的线性回归批量梯度下降不收敛?

来自分类Dev

振荡函数的积分在python中不收敛

来自分类Dev

分布式TF:多PS版本LR不收敛

来自分类Dev

在Tensorflow中使用神经网络实现XOR门的问题

来自分类Dev

Tensorflow收敛但预测错误

来自分类Dev

SGD收敛,但批处理学习不收敛,张量流中的简单回归

来自分类Dev

Python-Vincenty的逆公式不收敛(查找地球上两点之间的距离)

来自分类Dev

线性回归模型(使用梯度下降)在波士顿房屋数据集上不收敛

来自分类Dev

深度神经网络训练,为什么网络训练不收敛?

来自分类Dev

虹膜数据上的 Python 中的感知器代码不收敛

来自分类Dev

在简单的多层 FFNN 中,只有 ReLU 激活函数不收敛

来自分类Dev

自编码器模型在 MNIST 数据集上振荡或不收敛

来自分类Dev

在TensorFlow中获取一个简单的MLP以对XOR建模

来自分类Dev

在TensorFlow中获得一个简单的MLP以对XOR建模

Related 相关文章

热门标签

归档