我试图了解tf.layers.dense
对数组的作用,并在使用下面的代码。但是,在运行代码时出现错误。
我尝试调试,似乎在计算张量的秩时可能存在一些问题。但是,sess.run(tf.rank(a))
成功返回3。因此,我认为张量本身还有其他问题。
import numpy as np
import tensorflow as tf
a = np.array([[[1, 0, 0], [1, 1, 0]], [[0, 0, 0], [0, 1, 1]]])
hidden_layer = tf.layers.dense(a, 5, activation=tf.nn.relu)
sess = tf.Session()
print(sess.run(hidden_layer))
上面的代码抛出错误 AttributeError:'tuple'对象没有属性'ndims',但是我希望应该创建一个具有权重和偏差的完全连接的层。
我在做什么错了?
此外,如果有人可以展示与该实现等效的Python / NumPy(不使用tensorflow的密集型),那将非常有帮助,以便直观地进行操作。
答案 0 :(得分:0)
该代码有两个问题:Dense
层希望输入Tensor
而不是Numpy数组,并且需要显式初始化隐藏层的权重。这是带有一些注释的更正代码:
import numpy as np
import tensorflow as tf
# Make sure Dense layer is always initialized with the same values.
tf.set_random_seed(0)
# Dense layer will need float input
a = np.array([[[1, 0, 0], [1, 1, 0]], [[0, 0, 0], [0, 1, 1]]],
dtype=np.float32)
# Convert numpy array to Tensor
t = tf.convert_to_tensor(a)
# Create hidden layer with the array as input and random initializer that
# draws from a uniform distribution.
hidden_layer = tf.layers.dense(t, 5, activation=tf.nn.relu)
sess = tf.Session()
# Initialize Dense layer with the random initializer
sess.run(tf.global_variables_initializer())
# Print result of running the array through the Dense layer
print(sess.run(hidden_layer))
顺便说一句,只要您正在尝试,就可能会受益于在eager mode中使用TensorFlow或使用具有更友好界面的PyTorch。
答案 1 :(得分:0)
首先,您应该重塑a。然后将a输入到隐藏层。然后应该初始化参数。
import numpy as np
import tensorflow as tf
a = np.array([[[1, 0, 0], [1, 1, 0]], [[0, 0, 0], [0, 1, 1]]], dtype=np.int32)
a = tf.reshape(a, [-1, 4*3])
hidden_layer = tf.layers.dense(a, 5, activation=tf.nn.relu)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(hidden_layer))