CNN:了解权重输出通道参数

时间:2017-12-12 13:54:25

标签: machine-learning tensorflow deep-learning conv-neural-network convolution

public class RadioButtonListView extends Application {

    public static final ObservableList names =
            FXCollections.observableArrayList();
    private ToggleGroup group = new ToggleGroup();

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("List View Sample");

        final ListView listView = new ListView();
        listView.setPrefSize(200, 250);
        listView.setEditable(true);

        names.addAll(
                "Adam", "Alex", "Alfred", "Albert",
                "Brenda", "Connie", "Derek", "Donny",
                "Lynne", "Myrtle", "Rose", "Rudolph",
                "Tony", "Trudy", "Williams", "Zach"
        );

        listView.setItems(names);
        listView.setCellFactory(param -> new RadioListCell());

        StackPane root = new StackPane();
        root.getChildren().add(listView);
        primaryStage.setScene(new Scene(root, 200, 250));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

    private class RadioListCell extends ListCell<String> {

        RadioButton radioButton;
        ChangeListener<Boolean> radioListener = (src, ov, nv) -> radioChanged(nv);
        WeakChangeListener<Boolean> weakRadioListener = new WeakChangeListener(radioListener);

        public RadioListCell() {
            radioButton = new RadioButton();
            radioButton.selectedProperty().addListener(weakRadioListener);
            radioButton.setFocusTraversable(false);
            // let it span the complete width of the list
            // needed in fx8 to update selection state
            radioButton.setMaxWidth(Double.MAX_VALUE);
        }

        protected void radioChanged(boolean selected) {
            if (selected && getListView() != null && !isEmpty() && getIndex() >= 0) {
                getListView().getSelectionModel().select(getIndex());
            }
        }

        @Override
        public void updateItem(String obj, boolean empty) {
            super.updateItem(obj, empty);
            if (empty) {
                setText(null);
                setGraphic(null);
                radioButton.setToggleGroup(null);
            } else {
                radioButton.setText(obj);
                radioButton.setToggleGroup(group);
                radioButton.setSelected(isSelected());
                setGraphic(radioButton);
            }
        }
    }
}

我的问题是: 如何计算特征/通道输出的数量,在这种情况下,第一层是32,第二层是64,第三层是1024?如果我在CNN中添加多于或少于32,64,1024的数字会产生什么影响?

2 个答案:

答案 0 :(得分:0)

此CNN模型的限制如下:

  • 7x7由输入图像大小决定。在这种情况下,在2次下采样(池化)操作之后它是28x28
  • 转化层中的要素数量(3264)可以是任意的,但必须与下一层的深度值相对应。因此,如果您在32中将48更改为wc1,则必须在32中将48更改为wc2
  • 与FC层的大小相同:1024中的wd1必须与1024中的out相对应。

除此之外,您可以设置任何值,但可能会或可能不会提高网络性能。通常,研究将它们设置得尽可能大,以便模型仍然适合GPU内存,因为更大的模型往往更好地学习。同样有必要从早期层向下增加尺寸,以捕获学习特征的复杂性,即第二层中的变化大于第一层中的变化。

答案 1 :(得分:0)

作为过滤器的数量,例如32,64,128,1024是设计决策,模型设计者决定使用的过滤器数量。在这种情况下,你。通常使用2的幂2 ^ 5 = 32,2 ^ 6 = 64等。除了影响模型将具有的参数数量之外,不同数量的滤波器显然会对计算所需的操作数量产生影响。学习。

e.g。尺寸为5x5x1(高x宽x通道)的10个滤波器将具有(5 x 5 x 1 + 1)x 10 = 110参数进行训练。请注意,+ 1表示偏差项。

我建议阅读以下内容,特别是有关ConvNet架构的部分。 http://cs231n.github.io/convolutional-networks/#architectures

对于卷积算术,我发现“深度学习的卷积算法指南”资源丰富:https://arxiv.org/abs/1603.07285