gpt4 book ai didi

python - 我的三层神经网络的输出是 NAN

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:54 25 4
gpt4 key购买 nike

我编写了一个简单的三层神经网络,没有任何优化或成本最小化。我只是初始化神经网络的权重,然后前馈以获得输出。这是我的代码。

def create_placeholders(n_x, n_y):
#n_x -- scalar, size of an image vector (num_px * num_px = 64 * 64 * 3 = 12288)
#n_y -- scalar, number of classes (from 0 to 5, so -> 6)

X = tf.placeholder(shape=[n_x, None],dtype=tf.float32)
Y = tf.placeholder(shape=[n_y, None],dtype=tf.float32)
return X, Y

现在参数初始化。

def initialize_parameters():
tf.set_random_seed(1)
W1 = tf.get_variable("W1", [25,1269], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
b1 = tf.get_variable("b1", [25,1], initializer = tf.zeros_initializer())
W2 = tf.get_variable("W2", [12, 25], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
b2 = tf.get_variable("b2", [12, 1], initializer = tf.zeros_initializer())
W3 = tf.get_variable("W3", [1, 12], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
b3 = tf.get_variable("b3", [1, 1], initializer = tf.zeros_initializer())
parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2,
"W3": W3,
"b3": b3}
return parameters

现在是前馈的重要函数,我认为存在一些问题,没有给出有效的输出。

def forward_propagation(X, parameters):
W1 = parameters['W1']
b1 = parameters['b1']
W2 = parameters['W2']
b2 = parameters['b2']
W3 = parameters['W3']
b3 = parameters['b3']

Z1 = tf.add(tf.matmul(W1,X),b1) # Z1 = np.dot(W1, X) + b1
A1 = tf.nn.relu(Z1) # A1 = relu(Z1)
Z2 = tf.add(tf.matmul(W2,A1),b2) # Z2 = np.dot(W2, a1) + b2
A2 = tf.nn.relu(Z2) # A2 = relu(Z2)
Z3 = tf.add(tf.matmul(W3,A2),b3) # Z3 = np.dot(W3,Z2) + b3 it should be # Z3 = np.dot(W3,A2) + b3
return Z3

下面是使用相同的 train_x_upsampledtrain_y_upsampled 为我的训练数据创建 session 和运行 session 的代码。

tf.reset_default_graph()
X, Y = create_placeholders(n_x, n_y)
parameters = initialize_parameters()
Z = forward_propagation(X, parameters)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
X, Y, parameters, Z3 = sess.run([X, Y, parameters, Z], feed_dict={X: train_x_upsampled, Y: train_y_upsampled})
print(Z3)

我想获取初始化参数的 Z3 的输出值。目前我得到了无效的输出。

[[ nan  nan  nan ...,  nan  nan  nan]]

最佳答案

因此,我使用 tf.verify_tensor_all_finite 确定了问题。我的输入训练数据的两列包含 NAN 值,这些值又使整个网络的输出为 nan。我使用以下代码确定了这些列。

ar_fulldata_input_norm.loc[:, ar_fulldata_input_norm.isnull().any()]

这会将 ar_fulldata_input_norm 作为输入,并仅给出包含 NAN 值的列。

我想指出,在我的训练数据中引入了 nan 值,因为 z 分数归一化,就像我的数据最初一样,所有行中的两列完全为零。我删除了这两列,问题就消失了。

关于python - 我的三层神经网络的输出是 NAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47569423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com