import tensorflow as tf

            nfilt_last = audio_nchannels
            for i, ((ntime, nband, nfilt), (ptime, pband)) in enumerate(zip(cnn_filter_shapes, cnn_pool)):
                layer_name = 'cnn_{}'.format(i)
                with tf.variable_scope(layer_name):
                    filters = tf.get_variable('filters', [ntime, nband, nfilt_last, nfilt], initializer=cnn_init, dtype=dtype)
                    biases = tf.get_variable('biases', [nfilt], initializer=tf.constant_initializer(0.1), dtype=dtype)
                if cnn_rnn_zack:
                    padding = 'SAME'
                else:
                    padding = 'VALID'

                conv = tf.nn.conv2d(layer_last, filters, [1, 1, 1, 1], padding=padding)
                biased = tf.nn.bias_add(conv, biases)
                convolved = tf.nn.relu(biased)

                pool_shape = [1, ptime, pband, 1]
                pooled = tf.nn.max_pool(convolved, ksize=pool_shape, strides=pool_shape, padding='SAME')
                print('{}: {}'.format(layer_name, pooled.get_shape()))

                export_feat_tensors[layer_name] = pooled

                # TODO: CNN dropout?

                layer_last = pooled
