2017-05-07 99 views
1

我是Tensorflow的完整初学者,如果我的问题很琐碎,我很抱歉,但我已经查看了文档和Google,我找不到答案。 (I也可用于我的英语道歉)Tensorflow - 数据的维度,占位符

我想这样做

sess.run(train, {x:x_train, y:x_train} 

其中x_train是大小3190包含我输入数据(维60的阵列* 4)

阵列

我的问题是,应该X是:

x = tf.placeholder(tf.bool, [60,4]) 

x = tf.placeholder(tf.bool, [None,60,4]) 

第一个提供了以下错误:

ValueError: Cannot feed value of shape (3190, 60, 4) for Tensor u'Placeholder:0', which has shape '(60, 4)' 

和,如果我使用第二个,我怎样才能跟0 <达到X [i] [j] = I < 60和0 < = j的< 4如果我想计算例如

tf.logical_and(x[i1][j1],x[i2][j2]) 

提前感谢您的回答。

+0

你确实需要在这种情况下,3D张量。然而,例子'tf.logical_and(x [i1] [j1],x [i2] [j2])'不够清楚。 'i1,j1'和'i2,j2'之间的关系是什么?你打算计算一个'60 * 4 * 60 * 4'四维张量吗? –

+0

谢谢你的回答。我的每个3190输入都是一个60 * 4张量,代表了60个核苷酸的DNA序列。每个核苷酸被表示为布尔值的1 * 4阵列,指示该核苷酸是A,C,G还是T(例如,如果在30位存在A,则x [30] = [1,0,0,0] 。我想对输入执行一些“AND”操作,例如“在位置3有A并且在位置15有一个C”(x [3] [0]和x [15] [1]) 。所以每个都是1 * 1张量。 我希望这更清楚吗? – DNAprototype

回答

1

不要使用

x = tf.placeholder(tf.bool, [None,60,4]) 

,并为您的逻辑和使用

x_flat = tf.reshape(x , [ -1 , 60*4 ]) 
ij1 = tf.reshape(tf.one_hot([i1*4+j1] , 60*4 , dtype=tf.float32) , [ 60*4 , 1 ]) 
ij2 = tf.reshape(tf.one_hot([i2*4+j2] , 60*4 , dtype=tf.float32) , [ 60*4 , 1 ]) 

tf.logical_and(tf.matmul(x_flat , ij1) , tf.matmul(x_flat , ij2)) 
+0

谢谢!我添加了一些casts(布尔到float32 for matmul和float32到布尔for logical_and),这似乎是工作。非常感谢你 ! – DNAprototype

+0

请将此答案标记为解决方案@DNAprototype – Wontonimo