首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择一维信号的张量形状?由于张量形状,我一直得到VlaueError

如何选择一维信号的张量形状?由于张量形状,我一直得到VlaueError
EN

Stack Overflow用户
提问于 2018-05-11 09:27:51
回答 1查看 52关注 0票数 0

我试图为一维信号建立CNN模型,但我无法理解等级错误。

我的程序是这样的:

代码语言:javascript
复制
#Weights
def init_weights(shape):
    init_random_dist = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(init_random_dist)


#Bias
def init_bias(shape):
    init_bias = tf.constant(0.1,shape=shape)
    return tf.Variable(init_bias)

def conv1d(x,W):
    #x is input accelration data and W is corresponding weight
    x = tf.cast(x, tf.float32)
    tf.nn.conv1d(x,W,stride=1,padding='VALID')

def convolution_layer(input_x,shape):
    w = init_weights(shape)
    b = init_bias([shape[3]])
    return tf.nn.relu(conv1d(input_x,w)+b)
  • 现在占位符 x = tf.placeholder(tf.float32,shape=[1,1,200,1]) y_true = tf.placeholder(tf.float32,shape=[None,6])

当使用con_layer_1 = convolution_layer(x,shape=[1,20,1,32])创建第一层时,我得到了等级ValueError,这是我无法执行的。错误声明是:

ValueError: Shape must be rank 4 but is rank 5 for 'conv1d_20/Conv2D' (op: 'Conv2D') with input shapes: [1,1,1,200,1], [1,1,20,1,32].

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-11 09:48:59

nn.conv1d的输入和权重形状不正确。nn.conv1d的输入形状应该是大小:[ batch_size, input_length, input_channels],权重矩阵应该是[filter_size, inputs_channels, output_channels]大小。因此,您需要将代码更改为:

代码语言:javascript
复制
def convolution_layer(input_x,shape):
   w = init_weights(shape)
   b = init_bias([shape[2]])
   return tf.nn.relu(conv1d(input_x,w)+b)

x = tf.placeholder(tf.float32,shape=[1,200,1])

y_true = tf.placeholder(tf.float32,shape=[None,6])

con_layer_1 = convolution_layer(x,shape=[20,1,32]) 

注意:您应该尝试使用You来处理权重分配等问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50289204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档