def run(): model_name = 'alexnet' directory_caffe = './caffemodel' directory_theano = './theanomodel' url_prototxt = 'https://raw.githubusercontent.com/BVLC/caffe/master/models/bvlc_alexnet/deploy.prototxt' url_caffemodel = 'http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel' filename_prototxt = '%s/%s.prototxt' % (directory_caffe, model_name) filename_caffemodel = '%s/%s.caffemodel' % (directory_caffe, model_name) filename_theanomodel = '%s/%s.model' % (directory_theano, model_name) # download caffemodel print 'downloading caffemodel' if not os.path.exists(directory_caffe): os.mkdir(directory_caffe) if not os.path.exists(filename_prototxt): p = subprocess.Popen(('wget', url_prototxt, '-O', filename_prototxt)) p.wait() if not os.path.exists(filename_caffemodel): p = subprocess.Popen(( 'wget', url_caffemodel, '-O', filename_caffemodel, )) p.wait() # load caffe model print 'loading caffe model' model_caffe = caffe.Net(filename_prototxt, filename_caffemodel, True) conv1_W = theano.shared(model_caffe.params['conv1'][0].data[:, :, ::-1, ::-1]) conv2_W = theano.shared(model_caffe.params['conv2'][0].data[:, :, ::-1, ::-1]) conv3_W = theano.shared(model_caffe.params['conv3'][0].data[:, :, ::-1, ::-1]) conv4_W = theano.shared(model_caffe.params['conv4'][0].data[:, :, ::-1, ::-1]) conv5_W = theano.shared(model_caffe.params['conv5'][0].data[:, :, ::-1, ::-1]) conv1_b = theano.shared(model_caffe.params['conv1'][1].data.squeeze()) conv2_b = theano.shared(model_caffe.params['conv2'][1].data.squeeze()) conv3_b = theano.shared(model_caffe.params['conv3'][1].data.squeeze()) conv4_b = theano.shared(model_caffe.params['conv4'][1].data.squeeze()) conv5_b = theano.shared(model_caffe.params['conv5'][1].data.squeeze()) fc6_W = theano.shared(model_caffe.params['fc6'][0].data.squeeze()) fc7_W = theano.shared(model_caffe.params['fc7'][0].data.squeeze()) fc8_W = theano.shared(model_caffe.params['fc8'][0].data.squeeze()) fc6_b = theano.shared(model_caffe.params['fc6'][1].data.squeeze()) fc7_b = theano.shared(model_caffe.params['fc7'][1].data.squeeze()) fc8_b = theano.shared(model_caffe.params['fc8'][1].data.squeeze()) # make theano model print 'building theano model' model_theano = collections.OrderedDict() model_theano['data'] = T.tensor4() model_theano['conv1'] = layers.convolution_layer(model_theano['data'], conv1_W, conv1_b, subsample=(4, 4)) model_theano['relu1'] = layers.relu_layer(model_theano['conv1']) model_theano['norm1'] = layers.lrn_layer(model_theano['relu1']) model_theano['pool1'] = layers.pooling_layer(model_theano['norm1']) model_theano['conv2'] = layers.convolution_layer(model_theano['pool1'], conv2_W, conv2_b, border='same', group=2) model_theano['relu2'] = layers.relu_layer(model_theano['conv2']) model_theano['norm2'] = layers.lrn_layer(model_theano['relu2']) model_theano['pool2'] = layers.pooling_layer(model_theano['norm2']) model_theano['conv3'] = layers.convolution_layer(model_theano['pool2'], conv3_W, conv3_b, border='same') model_theano['relu3'] = layers.relu_layer(model_theano['conv3']) model_theano['conv4'] = layers.convolution_layer(model_theano['relu3'], conv4_W, conv4_b, border='same', group=2) model_theano['relu4'] = layers.relu_layer(model_theano['conv4']) model_theano['conv5'] = layers.convolution_layer(model_theano['relu4'], conv5_W, conv5_b, border='same', group=2) model_theano['relu5'] = layers.relu_layer(model_theano['conv5']) model_theano['pool5'] = layers.pooling_layer(model_theano['relu5']) model_theano['fc6'] = layers.inner_product_layer(model_theano['pool5'], fc6_W, fc6_b) model_theano['relu6'] = layers.relu_layer(model_theano['fc6']) model_theano['fc7'] = layers.inner_product_layer(model_theano['relu6'], fc7_W, fc7_b) model_theano['relu7'] = layers.relu_layer(model_theano['fc7']) model_theano['fc8'] = layers.inner_product_layer(model_theano['relu7'], fc8_W, fc8_b) model_theano['prob'] = layers.softmax_layer(model_theano['fc8']) # check print 'checking model' data = np.random.randn(*model_caffe.blobs['data'].data.shape) data = data.astype(np.float32) * 10 model_caffe.blobs['data'].data[:] = data model_caffe.forward() theano_output = theano.function( [model_theano['data']], model_theano['prob'], )(data) error = ( theano_output.squeeze() - model_caffe.blobs['prob'].data.squeeze() ).max() assert error < 1e-6 # save print 'saving' if not os.path.exists(directory_theano): os.mkdir(directory_theano) sys.setrecursionlimit(100000) pickle.dump( model_theano, open(filename_theanomodel, 'wb'), protocol=pickle.HIGHEST_PROTOCOL, ) print 'done'
def run(): model_name = "vggnet" directory_caffe = "./caffemodel" directory_theano = "./theanomodel" url_prototxt = "https://gist.githubusercontent.com/ksimonyan/3785162f95cd2d5fee77/raw/f02f8769e64494bcd3d7e97d5d747ac275825721/VGG_ILSVRC_19_layers_deploy.prototxt" url_caffemodel = "http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel" filename_prototxt = "%s/%s.prototxt" % (directory_caffe, model_name) filename_caffemodel = "%s/%s.caffemodel" % (directory_caffe, model_name) filename_theanomodel = "%s/%s.model" % (directory_theano, model_name) # download caffemodel print "downloading caffemodel" if not os.path.exists(directory_caffe): os.mkdir(directory_caffe) if not os.path.exists(filename_prototxt): p = subprocess.Popen(("wget", url_prototxt, "-O", filename_prototxt)) p.wait() if not os.path.exists(filename_caffemodel): p = subprocess.Popen(("wget", url_caffemodel, "-O", filename_caffemodel)) p.wait() # load caffe model model_caffe = caffe.Net(filename_prototxt, filename_caffemodel, True) conv1_1_W = theano.shared(model_caffe.params["conv1_1"][0].data[:, :, ::-1, ::-1]) conv1_2_W = theano.shared(model_caffe.params["conv1_2"][0].data[:, :, ::-1, ::-1]) conv2_1_W = theano.shared(model_caffe.params["conv2_1"][0].data[:, :, ::-1, ::-1]) conv2_2_W = theano.shared(model_caffe.params["conv2_2"][0].data[:, :, ::-1, ::-1]) conv3_1_W = theano.shared(model_caffe.params["conv3_1"][0].data[:, :, ::-1, ::-1]) conv3_2_W = theano.shared(model_caffe.params["conv3_2"][0].data[:, :, ::-1, ::-1]) conv3_3_W = theano.shared(model_caffe.params["conv3_3"][0].data[:, :, ::-1, ::-1]) conv3_4_W = theano.shared(model_caffe.params["conv3_4"][0].data[:, :, ::-1, ::-1]) conv4_1_W = theano.shared(model_caffe.params["conv4_1"][0].data[:, :, ::-1, ::-1]) conv4_2_W = theano.shared(model_caffe.params["conv4_2"][0].data[:, :, ::-1, ::-1]) conv4_3_W = theano.shared(model_caffe.params["conv4_3"][0].data[:, :, ::-1, ::-1]) conv4_4_W = theano.shared(model_caffe.params["conv4_4"][0].data[:, :, ::-1, ::-1]) conv5_1_W = theano.shared(model_caffe.params["conv5_1"][0].data[:, :, ::-1, ::-1]) conv5_2_W = theano.shared(model_caffe.params["conv5_2"][0].data[:, :, ::-1, ::-1]) conv5_3_W = theano.shared(model_caffe.params["conv5_3"][0].data[:, :, ::-1, ::-1]) conv5_4_W = theano.shared(model_caffe.params["conv5_4"][0].data[:, :, ::-1, ::-1]) conv1_1_b = theano.shared(model_caffe.params["conv1_1"][1].data.squeeze()) conv1_2_b = theano.shared(model_caffe.params["conv1_2"][1].data.squeeze()) conv2_1_b = theano.shared(model_caffe.params["conv2_1"][1].data.squeeze()) conv2_2_b = theano.shared(model_caffe.params["conv2_2"][1].data.squeeze()) conv3_1_b = theano.shared(model_caffe.params["conv3_1"][1].data.squeeze()) conv3_2_b = theano.shared(model_caffe.params["conv3_2"][1].data.squeeze()) conv3_3_b = theano.shared(model_caffe.params["conv3_3"][1].data.squeeze()) conv3_4_b = theano.shared(model_caffe.params["conv3_4"][1].data.squeeze()) conv4_1_b = theano.shared(model_caffe.params["conv4_1"][1].data.squeeze()) conv4_2_b = theano.shared(model_caffe.params["conv4_2"][1].data.squeeze()) conv4_3_b = theano.shared(model_caffe.params["conv4_3"][1].data.squeeze()) conv4_4_b = theano.shared(model_caffe.params["conv4_4"][1].data.squeeze()) conv5_1_b = theano.shared(model_caffe.params["conv5_1"][1].data.squeeze()) conv5_2_b = theano.shared(model_caffe.params["conv5_2"][1].data.squeeze()) conv5_3_b = theano.shared(model_caffe.params["conv5_3"][1].data.squeeze()) conv5_4_b = theano.shared(model_caffe.params["conv5_4"][1].data.squeeze()) fc6_W = theano.shared(model_caffe.params["fc6"][0].data.squeeze()) fc7_W = theano.shared(model_caffe.params["fc7"][0].data.squeeze()) fc8_W = theano.shared(model_caffe.params["fc8"][0].data.squeeze()) fc6_b = theano.shared(model_caffe.params["fc6"][1].data.squeeze()) fc7_b = theano.shared(model_caffe.params["fc7"][1].data.squeeze()) fc8_b = theano.shared(model_caffe.params["fc8"][1].data.squeeze()) # make theano model model_theano = collections.OrderedDict() model_theano["data"] = T.tensor4() model_theano["conv1_1"] = layers.convolution_layer(model_theano["data"], conv1_1_W, conv1_1_b, border="same") model_theano["relu1_1"] = layers.relu_layer(model_theano["conv1_1"]) model_theano["conv1_2"] = layers.convolution_layer(model_theano["relu1_1"], conv1_2_W, conv1_2_b, border="same") model_theano["relu1_2"] = layers.relu_layer(model_theano["conv1_2"]) model_theano["pool1"] = layers.pooling_layer(model_theano["relu1_2"], size=(2, 2), stride=(2, 2)) model_theano["conv2_1"] = layers.convolution_layer(model_theano["pool1"], conv2_1_W, conv2_1_b, border="same") model_theano["relu2_1"] = layers.relu_layer(model_theano["conv2_1"]) model_theano["conv2_2"] = layers.convolution_layer(model_theano["relu2_1"], conv2_2_W, conv2_2_b, border="same") model_theano["relu2_2"] = layers.relu_layer(model_theano["conv2_2"]) model_theano["pool2"] = layers.pooling_layer(model_theano["relu2_2"], size=(2, 2), stride=(2, 2)) model_theano["conv3_1"] = layers.convolution_layer(model_theano["pool2"], conv3_1_W, conv3_1_b, border="same") model_theano["relu3_1"] = layers.relu_layer(model_theano["conv3_1"]) model_theano["conv3_2"] = layers.convolution_layer(model_theano["relu3_1"], conv3_2_W, conv3_2_b, border="same") model_theano["relu3_2"] = layers.relu_layer(model_theano["conv3_2"]) model_theano["conv3_3"] = layers.convolution_layer(model_theano["relu3_2"], conv3_3_W, conv3_3_b, border="same") model_theano["relu3_3"] = layers.relu_layer(model_theano["conv3_3"]) model_theano["conv3_4"] = layers.convolution_layer(model_theano["relu3_3"], conv3_4_W, conv3_4_b, border="same") model_theano["relu3_4"] = layers.relu_layer(model_theano["conv3_4"]) model_theano["pool3"] = layers.pooling_layer(model_theano["relu3_4"], size=(2, 2), stride=(2, 2)) model_theano["conv4_1"] = layers.convolution_layer(model_theano["pool3"], conv4_1_W, conv4_1_b, border="same") model_theano["relu4_1"] = layers.relu_layer(model_theano["conv4_1"]) model_theano["conv4_2"] = layers.convolution_layer(model_theano["relu4_1"], conv4_2_W, conv4_2_b, border="same") model_theano["relu4_2"] = layers.relu_layer(model_theano["conv4_2"]) model_theano["conv4_3"] = layers.convolution_layer(model_theano["relu4_2"], conv4_3_W, conv4_3_b, border="same") model_theano["relu4_3"] = layers.relu_layer(model_theano["conv4_3"]) model_theano["conv4_4"] = layers.convolution_layer(model_theano["relu4_3"], conv4_4_W, conv4_4_b, border="same") model_theano["relu4_4"] = layers.relu_layer(model_theano["conv4_4"]) model_theano["pool4"] = layers.pooling_layer(model_theano["relu4_4"], size=(2, 2), stride=(2, 2)) model_theano["conv5_1"] = layers.convolution_layer(model_theano["pool4"], conv5_1_W, conv5_1_b, border="same") model_theano["relu5_1"] = layers.relu_layer(model_theano["conv5_1"]) model_theano["conv5_2"] = layers.convolution_layer(model_theano["relu5_1"], conv5_2_W, conv5_2_b, border="same") model_theano["relu5_2"] = layers.relu_layer(model_theano["conv5_2"]) model_theano["conv5_3"] = layers.convolution_layer(model_theano["relu5_2"], conv5_3_W, conv5_3_b, border="same") model_theano["relu5_3"] = layers.relu_layer(model_theano["conv5_3"]) model_theano["conv5_4"] = layers.convolution_layer(model_theano["relu5_3"], conv5_4_W, conv5_4_b, border="same") model_theano["relu5_4"] = layers.relu_layer(model_theano["conv5_4"]) model_theano["pool5"] = layers.pooling_layer(model_theano["relu5_4"], size=(2, 2), stride=(2, 2)) model_theano["fc6"] = layers.inner_product_layer(model_theano["pool5"], fc6_W, fc6_b) model_theano["relu6"] = layers.relu_layer(model_theano["fc6"]) model_theano["fc7"] = layers.inner_product_layer(model_theano["relu6"], fc7_W, fc7_b) model_theano["relu7"] = layers.relu_layer(model_theano["fc7"]) model_theano["fc8"] = layers.inner_product_layer(model_theano["relu7"], fc8_W, fc8_b) model_theano["prob"] = layers.softmax_layer(model_theano["fc8"]) # check data = np.random.randn(*model_caffe.blobs["data"].data.shape).astype(np.float32) * 10 model_caffe.blobs["data"].data[:] = data model_caffe.forward() theano_output = theano.function([model_theano["data"]], model_theano["prob"])(data) error = (theano_output.squeeze() - model_caffe.blobs["prob"].data.squeeze()).max() assert error < 1e-6 # save print "saving" if not os.path.exists(directory_theano): os.mkdir(directory_theano) sys.setrecursionlimit(100000) pickle.dump(model_theano, open(filename_theanomodel, "wb"), protocol=pickle.HIGHEST_PROTOCOL) print "done"
def run(): model_name = 'alexnet' directory_caffe = './caffemodel' directory_theano = './theanomodel' url_prototxt = 'https://raw.githubusercontent.com/BVLC/caffe/master/models/bvlc_alexnet/deploy.prototxt' url_caffemodel = 'http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel' filename_prototxt = '%s/%s.prototxt' % (directory_caffe, model_name) filename_caffemodel = '%s/%s.caffemodel' % (directory_caffe, model_name) filename_theanomodel = '%s/%s.model' % (directory_theano, model_name) # download caffemodel print 'downloading caffemodel' if not os.path.exists(directory_caffe): os.mkdir(directory_caffe) if not os.path.exists(filename_prototxt): p = subprocess.Popen(('wget', url_prototxt, '-O', filename_prototxt)) p.wait() if not os.path.exists(filename_caffemodel): p = subprocess.Popen(( 'wget', url_caffemodel, '-O', filename_caffemodel, )) p.wait() # load caffe model print 'loading caffe model' model_caffe = caffe.Net(filename_prototxt, filename_caffemodel, True) conv1_W = theano.shared( model_caffe.params['conv1'][0].data[:, :, ::-1, ::-1]) conv2_W = theano.shared( model_caffe.params['conv2'][0].data[:, :, ::-1, ::-1]) conv3_W = theano.shared( model_caffe.params['conv3'][0].data[:, :, ::-1, ::-1]) conv4_W = theano.shared( model_caffe.params['conv4'][0].data[:, :, ::-1, ::-1]) conv5_W = theano.shared( model_caffe.params['conv5'][0].data[:, :, ::-1, ::-1]) conv1_b = theano.shared(model_caffe.params['conv1'][1].data.squeeze()) conv2_b = theano.shared(model_caffe.params['conv2'][1].data.squeeze()) conv3_b = theano.shared(model_caffe.params['conv3'][1].data.squeeze()) conv4_b = theano.shared(model_caffe.params['conv4'][1].data.squeeze()) conv5_b = theano.shared(model_caffe.params['conv5'][1].data.squeeze()) fc6_W = theano.shared(model_caffe.params['fc6'][0].data.squeeze()) fc7_W = theano.shared(model_caffe.params['fc7'][0].data.squeeze()) fc8_W = theano.shared(model_caffe.params['fc8'][0].data.squeeze()) fc6_b = theano.shared(model_caffe.params['fc6'][1].data.squeeze()) fc7_b = theano.shared(model_caffe.params['fc7'][1].data.squeeze()) fc8_b = theano.shared(model_caffe.params['fc8'][1].data.squeeze()) # make theano model print 'building theano model' model_theano = collections.OrderedDict() model_theano['data'] = T.tensor4() model_theano['conv1'] = layers.convolution_layer(model_theano['data'], conv1_W, conv1_b, subsample=(4, 4)) model_theano['relu1'] = layers.relu_layer(model_theano['conv1']) model_theano['norm1'] = layers.lrn_layer(model_theano['relu1']) model_theano['pool1'] = layers.pooling_layer(model_theano['norm1']) model_theano['conv2'] = layers.convolution_layer(model_theano['pool1'], conv2_W, conv2_b, border='same', group=2) model_theano['relu2'] = layers.relu_layer(model_theano['conv2']) model_theano['norm2'] = layers.lrn_layer(model_theano['relu2']) model_theano['pool2'] = layers.pooling_layer(model_theano['norm2']) model_theano['conv3'] = layers.convolution_layer(model_theano['pool2'], conv3_W, conv3_b, border='same') model_theano['relu3'] = layers.relu_layer(model_theano['conv3']) model_theano['conv4'] = layers.convolution_layer(model_theano['relu3'], conv4_W, conv4_b, border='same', group=2) model_theano['relu4'] = layers.relu_layer(model_theano['conv4']) model_theano['conv5'] = layers.convolution_layer(model_theano['relu4'], conv5_W, conv5_b, border='same', group=2) model_theano['relu5'] = layers.relu_layer(model_theano['conv5']) model_theano['pool5'] = layers.pooling_layer(model_theano['relu5']) model_theano['fc6'] = layers.inner_product_layer(model_theano['pool5'], fc6_W, fc6_b) model_theano['relu6'] = layers.relu_layer(model_theano['fc6']) model_theano['fc7'] = layers.inner_product_layer(model_theano['relu6'], fc7_W, fc7_b) model_theano['relu7'] = layers.relu_layer(model_theano['fc7']) model_theano['fc8'] = layers.inner_product_layer(model_theano['relu7'], fc8_W, fc8_b) model_theano['prob'] = layers.softmax_layer(model_theano['fc8']) # check print 'checking model' data = np.random.randn(*model_caffe.blobs['data'].data.shape) data = data.astype(np.float32) * 10 model_caffe.blobs['data'].data[:] = data model_caffe.forward() theano_output = theano.function( [model_theano['data']], model_theano['prob'], )(data) error = (theano_output.squeeze() - model_caffe.blobs['prob'].data.squeeze()).max() assert error < 1e-6 # save print 'saving' if not os.path.exists(directory_theano): os.mkdir(directory_theano) sys.setrecursionlimit(100000) pickle.dump( model_theano, open(filename_theanomodel, 'wb'), protocol=pickle.HIGHEST_PROTOCOL, ) print 'done'
def build_encoder(x): # The encoder uses the deep residual network. outputs = [] pooling = [1, 2, 2, 1] shape = x.get_shape().as_list() bs = shape[0] seq = shape[1] temp_shape = [bs * seq] + shape[2:] x = tf.reshape(x, temp_shape) # print x.get_shape().as_list() # layer 0 with tf.variable_scope("encoder_layer0", reuse=tf.AUTO_REUSE): conv0_0 = layers.conv_layer(name="conv0_0", x=x, filter_shape=layers.create_variable( "filter0_0", shape=[7, 7, 3, 96])) conv0_0 = layers.batch_normalization(conv0_0, "conv0_0_bn") conv0_0 = layers.relu_layer(conv0_0) conv0_1 = layers.conv_layer(name="conv0_1", x=conv0_0, filter_shape=layers.create_variable( "filter0_1", shape=[3, 3, 96, 96])) conv0_1 = layers.batch_normalization(conv0_1, "conv0_1_bn") conv0_1 = layers.relu_layer(conv0_1) shortcut0 = layers.conv_layer(name="shortcut", x=x, filter_shape=layers.create_variable( "filter0_2", shape=[1, 1, 3, 96])) shortcut0 = layers.batch_normalization(shortcut0, "shortcut0_bn") shortcut0 = layers.relu_layer(shortcut0) layer0 = layers.pooling_layer("pooling", conv0_1 + shortcut0, pooling) outputs.append(layer0) # [bs * size, 64, 64, 96] # layer 1 with tf.variable_scope("encoder_layer1", reuse=tf.AUTO_REUSE): conv1_0 = layers.conv_layer(name="conv1_0", x=layer0, filter_shape=layers.create_variable( "filter1_0", shape=[3, 3, 96, 128])) conv1_0 = layers.batch_normalization(conv1_0, "conv1_0_bn") conv1_0 = layers.relu_layer(conv1_0) conv1_1 = layers.conv_layer(name="conv1_1", x=conv1_0, filter_shape=layers.create_variable( "filter1_1", shape=[3, 3, 128, 128])) conv1_1 = layers.batch_normalization(conv1_1, "conv1_1_bn") conv1_1 = layers.relu_layer(conv1_1) shortcut1 = layers.conv_layer(name="shortcut", x=layer0, filter_shape=layers.create_variable( "filter1_2", shape=[1, 1, 96, 128])) shortcut1 = layers.batch_normalization(shortcut1, "shortcut1_bn") shortcut1 = layers.relu_layer(shortcut1) layer1 = layers.pooling_layer("pooling", conv1_1 + shortcut1, pooling) outputs.append(layer1) # [bs * size, 32, 32, 128] # layer 2 with tf.variable_scope("encoder_layer2", reuse=tf.AUTO_REUSE): conv2_0 = layers.conv_layer(name="conv2_0", x=layer1, filter_shape=layers.create_variable( "filter2_0", shape=[3, 3, 128, 256])) conv2_0 = layers.batch_normalization(conv2_0, "conv2_0_bn") conv2_0 = layers.relu_layer(conv2_0) conv2_1 = layers.conv_layer(name="conv2_1", x=conv2_0, filter_shape=layers.create_variable( "filter2_1", shape=[3, 3, 256, 256])) conv2_1 = layers.batch_normalization(conv2_1, "conv2_1_bn") conv2_1 = layers.relu_layer(conv2_1) shortcut2 = layers.conv_layer(name="shortcut", x=layer1, filter_shape=layers.create_variable( "filter2_2", shape=[1, 1, 128, 256])) shortcut2 = layers.batch_normalization(shortcut2, "shortcut2_bn") shortcut2 = layers.relu_layer(shortcut2) layer2 = layers.pooling_layer("pooling", conv2_1 + shortcut2, pooling) outputs.append(layer2) # [bs * size, 16, 16, 256] # layer 3 with tf.variable_scope("encoder_layer3", reuse=tf.AUTO_REUSE): conv3_0 = layers.conv_layer(name="conv3_0", x=layer2, filter_shape=layers.create_variable( "filter3_0", shape=[3, 3, 256, 256])) conv3_0 = layers.batch_normalization(conv3_0, "conv3_0_bn") conv3_0 = layers.relu_layer(conv3_0) conv3_1 = layers.conv_layer(name="conv3_1", x=conv3_0, filter_shape=layers.create_variable( "filter3_1", shape=[3, 3, 256, 256])) conv3_1 = layers.batch_normalization(conv3_1, "conv3_1_bn") conv3_1 = layers.relu_layer(conv3_1) layer3 = layers.pooling_layer("pooling", conv3_1, pooling) outputs.append(layer3) # [bs * size, 8, 8, 256] # layer 4 with tf.variable_scope("encoder_layer4", reuse=tf.AUTO_REUSE): conv4_0 = layers.conv_layer(name="conv4_0", x=layer3, filter_shape=layers.create_variable( "filter4_0", shape=[3, 3, 256, 256])) conv4_0 = layers.batch_normalization(conv4_0, "conv4_0_bn") conv4_0 = layers.relu_layer(conv4_0) conv4_1 = layers.conv_layer(name="conv4_1", x=conv4_0, filter_shape=layers.create_variable( "filter4_1", shape=[3, 3, 256, 256])) conv4_1 = layers.batch_normalization(conv4_1, "conv4_1_bn") conv4_1 = layers.relu_layer(conv4_1) shortcut4 = layers.conv_layer(name="shortcut", x=layer3, filter_shape=layers.create_variable( "filter4_2", shape=[1, 1, 256, 256])) shortcut4 = layers.batch_normalization(shortcut4, "shortcut4_bn") shortcut4 = layers.relu_layer(shortcut4) layer4 = layers.pooling_layer("pooling", conv4_1 + shortcut4, pooling) outputs.append(layer4) # [bs * size, 4, 4, 256] # layer 5 with tf.variable_scope("encoder_layer5", reuse=tf.AUTO_REUSE): conv5_0 = layers.conv_layer(name="conv5_0", x=layer4, filter_shape=layers.create_variable( "filter5_0", shape=[3, 3, 256, 256])) conv5_0 = layers.batch_normalization(conv5_0, "conv5_0_bn") conv5_0 = layers.relu_layer(conv5_0) conv5_1 = layers.conv_layer(name="conv5_1", x=conv5_0, filter_shape=layers.create_variable( "filter5_1", shape=[3, 3, 256, 256])) conv5_1 = layers.batch_normalization(conv5_1, "conv5_1_bn") conv5_1 = layers.relu_layer(conv5_1) shortcut5 = layers.conv_layer(name="shortcut", x=layer4, filter_shape=layers.create_variable( "filter5_2", shape=[1, 1, 256, 256])) shortcut5 = layers.batch_normalization(shortcut5, "shortcut5_bn") shortcut5 = layers.relu_layer(shortcut5) layer5 = layers.pooling_layer("pooling", conv5_1 + shortcut5, pooling) outputs.append(layer5) # [bs * size, 2, 2, 256] final_shape = [bs, seq, fc_layer_size[0]] # Flatten layer and fully connected layer flatten = layers.flatten_layer(layer5) outputs.append(flatten) with tf.variable_scope("fc_layer", reuse=tf.AUTO_REUSE): layer_fc = layers.fully_connected_layer(flatten, fc_layer_size[0], "fclayer_w", "fclayer_b") # layer_fc = layers.batch_normalization(layer_fc, "fc_bn") layer_fc = layers.relu_layer(layer_fc) outputs.append(layer_fc) # [bs * size, 1024] # [bs, size, 1024] return tf.reshape(outputs[-1], final_shape)