| 110 | |
| 111 | |
| 112 | def make_layers(config, batch_norm=False, end_with='outputs'): |
| 113 | layer_list = [] |
| 114 | is_end = False |
| 115 | for layer_group_idx, layer_group in enumerate(config): |
| 116 | if isinstance(layer_group, list): |
| 117 | for idx, layer in enumerate(layer_group): |
| 118 | layer_name = layer_names[layer_group_idx][idx] |
| 119 | n_filter = layer |
| 120 | if idx == 0: |
| 121 | if layer_group_idx > 0: |
| 122 | in_channels = config[layer_group_idx - 2][-1] |
| 123 | else: |
| 124 | in_channels = 3 |
| 125 | else: |
| 126 | in_channels = layer_group[idx - 1] |
| 127 | layer_list.append( |
| 128 | Conv2d( |
| 129 | n_filter=n_filter, filter_size=(3, 3), strides=(1, 1), act=tf.nn.relu, padding='SAME', |
| 130 | in_channels=in_channels, name=layer_name |
| 131 | ) |
| 132 | ) |
| 133 | if batch_norm: |
| 134 | layer_list.append(BatchNorm()) |
| 135 | if layer_name == end_with: |
| 136 | is_end = True |
| 137 | break |
| 138 | else: |
| 139 | layer_name = layer_names[layer_group_idx] |
| 140 | if layer_group == 'M': |
| 141 | layer_list.append(MaxPool2d(filter_size=(2, 2), strides=(2, 2), padding='SAME', name=layer_name)) |
| 142 | elif layer_group == 'O': |
| 143 | layer_list.append(Dense(n_units=1000, in_channels=4096, name=layer_name)) |
| 144 | elif layer_group == 'F': |
| 145 | layer_list.append(Flatten(name='flatten')) |
| 146 | elif layer_group == 'fc1': |
| 147 | layer_list.append(Dense(n_units=4096, act=tf.nn.relu, in_channels=512 * 7 * 7, name=layer_name)) |
| 148 | elif layer_group == 'fc2': |
| 149 | layer_list.append(Dense(n_units=4096, act=tf.nn.relu, in_channels=4096, name=layer_name)) |
| 150 | if layer_name == end_with: |
| 151 | is_end = True |
| 152 | if is_end: |
| 153 | break |
| 154 | return LayerList(layer_list) |
| 155 | |
| 156 | |
| 157 | def restore_model(model, layer_type): |