创建一个自定义层并对其进行卷积

时间:2019-02-21 15:02:07

标签: python tensorflow conv-neural-network

考虑代码:

            Dim fn As String = PediatricGrowthChartsImageHandler.GetPGCImagePath(CurrentPatient.EntityID, m_iChartTypeId)
        If Not IsNothing(customDrowingChart) Then
            Dim chartImage As Drawing.Image = customDrowingChart.GetChart()
            hdnImgChartH.Value = chartImage.Height.ToString 'test
            hdnImgChartW.Value = chartImage.Width.ToString 'test
            chartImage.Save(fn, System.Drawing.Imaging.ImageFormat.Png)
            chartImage.Dispose()
            imgChart.ImageUrl = String.Format("PediatricGrowthChartsImageHandler.axd?PatientID={0}&PGCTypeID={1}&rnd={2}", CurrentPatient.EntityID, m_iChartTypeId, New Random().NextDouble().ToString())
        Else
            Chart1.SaveImage(fn, ChartImageFormat.Png)
        End If
    End If
    If Not IsNothing(DataToBeFilled) Then DataToBeFilled.dispose()

End Sub

整个网络的输入尺寸应为1x20x20x1000,并且 返回大小为1x20x20x200的输出,其中200个输出logits中的每一个 通过大小为N_intermediate的自己的单层传递。

问题是图形的构建相当慢,并且 则需要太多内存,从而导致内存错误。 为了比较,下面的代码

from tensorflow.contrib import layers

#input_features is given, and is 1x20x20x1000 for instance.
N_outputs = 200
N_intermediate = 50

out_lst = []
for i in xrange(N_outputs):
    net = layers.conv2d(
        input_features,
        N_intermediate, [1, 1]
    )
    out = layers.conv2d(
        net,
        1, [1, 1],
        activation_fn=None,
        normalizer_fn=None
    )

    out_lst.append(out)

logits = tf.concat(out_lst,axis = 3)
尽管创建了更多的变量,但

创建了图形并且训练运行良好。 第一个版本与第二个版本等效,在最后一层中许多权重设置为0(并且它们的确必须为零)。

创建与第一个版本等效的网络的最佳方法是什么?

0 个答案:

没有答案