2017-12-05 2 views
0

풀링 계층의 출력을 밀집 계층에 연결하려고한다고 가정합니다. 이것을하기 위해서, 나는 풀링 된 텐서를 평평하게 할 필요가 있습니다. 아래의 층을 고려 : 내가 네트워크를 만들 수를 사용하고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을 하드 코딩하고 볼 수 있듯이. 이것을 피하는 방법?

답변

0

텐서라면 pool.get_shape()은 Keras 또는 Tensorflow에서 작동해야합니다.

이것은 실제로 각 차원의 크기와 함께 튜플을 반환하므로 선택해야합니다. 아마도 두 번째 경우입니다.

입력이 실제로 다른 레이어가없는 입력 인 경우 왜 최대 풀링을 사용합니까? 너는 dropout을 찾고 있지 않니?

실제로 당신의 배치 크기가 변수 인 경우 모델에게 나는`get_shape를 사용하여 시도 reshape

+0

의 크기를 말하는 방법이 없기 때문에 당신은()., to_list을 (문제를 찾을 수)'하지만 목록을 반환 치수가 일괄 처리 차원 일 때 int와'None'도 포함됩니까? 이것이 이것에 관한 유일한 길입니까? 매우 낮은 수준 인 것 같습니다. – juliohm

+0

@juliohm 업데이트보기 –

+0

업데이트 해 주셔서 감사합니다. @Diego, 더 많은 정보를 포함하도록 제 질문을 업데이트했습니다. 처음 시도했을 때 미안해. – juliohm

관련 문제