python - tensorflow 如何进行CNN计算?

标签 python tensorflow deep-learning

学习CNN时,发现博客很像blow

他用C语言做cnn,引用Matlab DeepLearnToolbox cnn。 代码如下:

//---forward Propagation,InputData is image data
void cnnff(CNN* cnn,float** inputData)
{
    int outSizeW=cnn->S2->inputWidth;
    int outSizeH=cnn->S2->inputHeight;
    int i,j,r,c;

    //---the first,convolution C1
    nSize mapSize={cnn->C1->mapSize,cnn->C1->mapSize};
    nSize inSize={cnn->C1->inputWidth,cnn->C1->inputHeight};
    nSize outSize={cnn->S2->inputWidth,cnn->S2->inputHeight};
    for(i=0;i<(cnn->C1->outChannels);i++){
        for(j=0;j<(cnn->C1->inChannels);j++){
            float** mapout=cov(cnn->C1->mapData[j][i],mapSize,inputData,inSize,valid);
            addmat(cnn->C1->v[i],cnn->C1->v[i],outSize,mapout,outSize);
            for(r=0;r<outSize.r;r++)
                free(mapout[r]);
            free(mapout);
        }
        for(r=0;r<outSize.r;r++)
            for(c=0;c<outSize.c;c++)
                cnn->C1->y[i][r][c]=activation_Sigma(cnn->C1->v[i][r][c],cnn->C1->basicData[i]);
    }

    //the second,pooling S2
    outSize.c=cnn->C3->inputWidth;
    outSize.r=cnn->C3->inputHeight;
    inSize.c=cnn->S2->inputWidth;
    inSize.r=cnn->S2->inputHeight;
    for(i=0;i<(cnn->S2->outChannels);i++){
        if(cnn->S2->poolType==AvePool)
            avgPooling(cnn->S2->y[i],outSize,cnn->C1->y[i],inSize,cnn->S2->mapSize);
    }
}

这段代码我可以看到输入图像卷积和池化后的值如何变化以及有多少个特征图。 那么,我可以在 Tensorflow 上看到这样的结果吗?

我在tensorflow\python\client\session.py中跟踪Tensorflow代码,代码如下

def _run_fn(session, feed_dict, fetch_list, target_list, options,
            run_metadata):
  # Ensure any changes to the graph are reflected in the runtime.
  self._extend_graph()
  with errors.raise_exception_on_not_ok_status() as status:
    if self._created_with_new_api:
      return tf_session.TF_SessionRun_wrapper(
          session, options, feed_dict, fetch_list, target_list,
          run_metadata, status)
    else:
      return tf_session.TF_Run(session, options,
                               feed_dict, fetch_list, target_list,
                               status, run_metadata)

当函数“tf_session.TF_Run”执行时,它只返回(loss,Accuracy ),但看不到该值如何改变。

然后我跟踪位于 C:\Users\xxx\AppData\Local\Continuum\Anaconda3\envs\tensorflow1\Lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py 的 Tensorflow 代码,代码如下

def TF_Run(session, run_options, feed_dict, output_names, target_nodes, out_status, run_outputs):
    return _pywrap_tensorflow_internal.TF_Run(session, run_options, feed_dict, output_names, target_nodes, out_status, run_outputs)
TF_Run = _pywrap_tensorflow_internal.TF_Run

pywrap_tensorflow_internal.py使用了_pywrap_tensorflow_internal.pyd,我认为如何更改的值在这个.pyd上。那么,这个 .pyd 源代码在哪里?因为这个.pyd只能通过“pip install tensorflow”下载。

最佳答案

我想您的意思是您想知道 tf.nn.conv2d 和排序是如何实现的。如果您是 TensorFlow 新手,您会注意到有 layers(例如 tf.layers.conv2d)和 nn(例如 tf.nn.conv2d)。 layers 都是 nn 的包装器,因此如果您只想立即实现,请忽略 layers

现在,如果您阅读documentation for tf.nn.conv2d ,它说:

Defined in generated file: tensorflow/python/ops/gen_nn_ops.py.

为了进行比较,请查看 documentation for tf.nn.conv2d_transpose ,其中表示:

Defined in tensorflow/python/ops/nn_ops.py.

现在,如果您单击 tensorflow/python/ops/nn_ops.py,它实际上会将您带到定义 tf.nn.conv2d_transpose 的文件。但对于您感兴趣的tf.nn.conv2d,此链接不存在。这是因为您可以用 C++ 编写该层,并让 TensorFlow 生成 Python 部分,从而在生成的文件中定义文本。实际的实现分布在三个文件中:

关于python - tensorflow 如何进行CNN计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902947/

相关文章:

performance - 为深度学习选择小批量大小

deep-learning - 是否可以从神经网络模型中断的地方开始执行?

python - 删除 Dask 中的空分区

python - Jupyter Notebook 导出 HTML 深色

python - 扫描重复的文件名

python - Tensorflow 服务返回 400 Bad Request 错误

tensorflow - 从 tf.data.Dataset.map() 返回数据集会导致 'TensorSliceDataset' 对象没有属性 'get_shape' 错误

python - 我可以使用什么函数来循环 URL 参数并将其显示在 Pandas 数据框中?

python - 在 docker 容器中运行 tensorflow 时出错

python - 如何修复: RuntimeError: size mismatch in pyTorch