如何获取TensorFlow层中的神经元数量?

时间:2017-12-05 21:07:07

标签: python tensorflow

假设我正在尝试将池化层的输出连接到密集层。为了做到这一点,我需要压缩汇集的张量。考虑以下几层:

def conv_layer(input, in_channels, out_channels, name="conv"):
    w = tf.get_variable("W", initializer=tf.truncated_normal([3, 3, in_channels, out_channels], stddev=0.1))
    b = tf.get_variable("B", initializer=tf.constant(0.1, shape=[out_channels]))
    conv = tf.nn.conv2d(input, w, strides=[1,1,1,1], padding="SAME")
    act = tf.nn.relu(conv + b)
    return act

def pool_layer(input, name="pool"):
    pool = tf.nn.max_pool(input, ksize=[1,2,2,1], strides=[1,2,2,1], padding="SAME")
    return pool

def dense_layer(input, size_in, size_out, name="dense"):
    w = tf.get_variable("W", initializer=tf.truncated_normal([size_in, size_out], stddev=0.1))
    b = tf.get_variable("B", initializer=tf.constant(0.1, shape=[size_out]))
    act = tf.nn.relu(tf.matmul(input, w) + b)
    return act

我正在使用它们来创建网络:

def cnn_model(x):
    x_image = tf.reshape(x, [-1, nseries, present_window, 1])
    conv1 = conv_layer(x_image, 1, 32, "conv1")
    pool1 = pool_layer(conv1, "pool1")
    conv2 = conv_layer(pool1, 32, 64, "conv2")
    pool2 = pool_layer(conv2, "pool2")
    nflat = 17*15*64 # hard-coded
    flat  = tf.reshape(pool2, [-1, nflat])
    yhat = dense_layer(flat, nflat, future_window, "dense1")
    return yhat

正如您所看到的,我正在对变量nflat进行硬编码。怎么避免这个?

1 个答案:

答案 0 :(得分:1)

如果是张量pool.get_shape()应该适用于Keras或Tensorflow。

这实际上将返回一个具有每个维度大小的元组,因此您需要从中进行选择,可能它是您的第二个。

如果输入实际上是您的输入(没有任何其他图层),为什么要最大化池?你不是在寻找dropout吗?

如果您的批量大小是可变的,确实会发现问题,因为无法告诉模型reshape的大小