专家。我是DNN和Python的新手。我正在尝试使用TensorFlow进行一些DNN学习工作。在工作期间,我遇到了一个我自己无法解决的问题。在一个步骤中,我想将一个称为"输入"的张量标准化。归一化只是将矢量的最大ABS占据,然后将矢量的所有元素分配为我的最大ABS。但是发生以下问题:
(( 55 tmp_index = tf.argmax(tmp_abs,0)
56 tmp_index1 = tf.cast(tmp_index,dtype = tf.int32)
---> 57 inputs = inputs/tmp_abs[tmp_index1]
58
59 if index != len(Layers)-1:
InvalidArgumentError:形状必须为等级1,但具有输入形状的" hidden2_3/strided_slice'(op:'strideSlice'(的等级为2:[?,1],[1,1],[1,1],[1,1],[[1,1],[1]。
任何建议将不胜感激。谢谢!
# input features and labels
x_ = tf.placeholder(name="input", shape=[None, 1], dtype=np.float32)
y_ = tf.placeholder(name="output", shape=[None, 1], dtype=np.float32)
# tf variables
Hidden = []
# Hidden Layers
for index, num_hidden in enumerate(Layers):
with tf.name_scope("hidden{}".format(index+1)):
if index == 0:
weights = tf.Variable(tf.truncated_normal([Fea_Size,num_hidden], stddev = get_stddev(Fea_Size,num_hidden)))
bias = tf.Variable(tf.zeros([num_hidden]))
else:
weights = tf.Variable(tf.truncated_normal([Layers[index-1], num_hidden], stddev = get_stddev(Layers[index-1], num_hidden)))
bias = tf.Variable(tf.zeros([num_hidden]))
inputs = x_ if index == 0 else Hidden[index-1]
if index !=0:
tmp_abs = tf.abs(inputs)
tmp_index = tf.argmax(tmp_abs,0)
tmp_index1 = tf.cast(tmp_index,dtype = tf.int32)
inputs = inputs/tmp_abs[tmp_index1]
if index != len(Layers)-1:
Hidden.append(tf.nn.relu(tf.matmul(inputs,weights) + bias))
else:
nonlin_model = tf.nn.relu(tf.matmul(inputs,weights) + bias)
nonlin_loss = tf.reduce_mean(tf.pow(nonlin_model - y_, 2), name='cost')
train_step_nonlin = tf.train.GradientDescentOptimizer(0.01).minimize(nonlin_loss)
问题是您的inputs
具有axis 0
的不变形状。
您可以使用:
inputs = inputs/tf.reduce_max(tf.abs(inputs))
tf.abs
返回inputs
的绝对值。 tf.reduce_max
返回最大值。
这是一个对我有用的代码段:
inputs = tf.placeholder(shape=[None, 1], dtype = tf.float32)
inputs_normal = inputs/tf.reduce_max(tf.abs(inputs))
all_pos = sess.run(inputs_normal, feed_dict={inputs:[[1],[2],[3]]})
all_neg = sess.run(inputs_normal, feed_dict={inputs:[[-1],[-2],[-3]]})
pos_neg = sess.run(inputs_normal, feed_dict={inputs:[[1],[2],[-3]]})
这是值:
all_pos = array([[0.33333334],
[0.6666667 ],
[1. ]], dtype=float32)
all_neg = array([[-0.33333334],
[-0.6666667 ],
[-1. ]], dtype=float32)
pos_neg = array([[ 0.33333334],
[ 0.6666667 ],
[-1. ]], dtype=float32)
我已经显示为2-D
张量,但也应适用于更高尺寸的张量。