如何在tensorflow图中包含有状态操作?

如何在tensorflow图中包含有状态操作?,tensorflow,deep-learning,image-segmentation,lstm,Tensorflow,Deep Learning,Image Segmentation,Lstm,我想使用tensorflow将LSTM插入到完全卷积神经网络(FCN)中。也就是说,在第五个卷积层之后,我们得到了一个形状的张量(14,14,512),我将这个张量调整到它原来的空间大小(229,229,512)。接下来我想做的是将这个张量分割成超级像素(比如说,1000个超级像素),然后将它们一个接一个地输入LSTM 问题是: 我希望整个结构都是端到端可培训的。但是在让超像素进入LSTM后,我们丢失了空间信息。我必须将特征(在LSTM之后)映射回其原始空间位置,以便它可以继续在FCN中流动。这

我想使用tensorflow将LSTM插入到完全卷积神经网络(FCN)中。也就是说,在第五个卷积层之后,我们得到了一个形状的张量(14,14,512),我将这个张量调整到它原来的空间大小(229,229,512)。接下来我想做的是将这个张量分割成超级像素(比如说,1000个超级像素),然后将它们一个接一个地输入LSTM

问题是:

我希望整个结构都是端到端可培训的。但是在让超像素进入LSTM后,我们丢失了空间信息。我必须将特征(在LSTM之后)映射回其原始空间位置,以便它可以继续在FCN中流动。这种映射在tensorflow中是有状态操作,在反向传播过程中不会让梯度流回到图的最开始

我还能对整个结构进行端到端的培训吗?我知道人们已经在Caffe中这样做了,但我不确定在tensorflow中是否可行?我希望这是我的错误,而不是tensorflow的局限性。多谢各位

注意:实际上我正在实现一个新的LSTM结构,我不确定现有的API是否有帮助。我会尽量针对这个问题更具体一些


假设我将张量(229、229、512)分为4个区域A、B、C、D。其中,A和B彼此相邻。每个区域对应4个LSTM,即LSTMa、LSTMb、LSTMc和LSTMd。当我将B的特性馈送到LSTMb时,它将受到LSTMa的隐藏状态的影响(因为它们是邻居)。所以我需要将LSTMa的隐藏状态保存在tensorflow图的某个地方,并在更新A的邻居时调用它。但是这些操作,比如替换矩阵中的一行(tf.scatter\u update),似乎是有状态的操作,没有梯度。因此,整个体系结构可能无法进行端到端培训?

将LSTM添加到网络中的最简单方法是使用RNN的TensorFlow API,例如,它可以与其他层组合并可进行端到端培训。您是否尝试过这样做,您是否可以共享一些代码和错误消息以指示出现了什么问题?代码包含多个文件和大量行,可能太长而无法发布。我将首先尝试简洁地描述这个问题。@mrry我已经更新了我的问题,我希望这能把问题说清楚。如果这没用,我可以和你分享代码。谢谢