В основе этой проблемы лежит нечеткое понимание тензора и переменной в контексте тензорного потока. Позже, с большим знанием тензора, мне пришло в голову решение:
with tf.device('/cpu:0'), tf.name_scope("embedding"):
self.W = tf.Variable(
tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),
name="W")
self.embedded_chars = tf.nn.embedding_lookup(self.W, self.input_x)
for i in range(0,sequence_length - 1,2):
self.tslice = tf.slice(self.embedded_chars,[0,i,0],[0,1,128])
self.tslice2 = tf.slice(self.embedded_chars,[0,i+1,0],[0,1,128])
self.tslice3 = tf.slice(self.embedded_chars,[0,i+2,0],[0,1,128])
self.toffset1 = tf.subtract(self.tslice,self.tslice2)
self.toffset2 = tf.subtract(self.tslice2,self.tslice3)
self.tconcat = tf.concat([self.toffset1,self.toffset2],1)
self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)
используемая функция, tf.slice, tf.subtract, tf.concat - все принимают тензор в качестве входных данных. Просто избегайте использования такой функции, как tf.scatter_nd_update, для которой в качестве входных данных требуется переменная.