python - 无效参数错误 : You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape

标签 python tensorflow deep-learning pycharm

我在我的 Pycharm 中编写了以下代码,它在 Tensorflow 中执行完全连接层 (FCL)。占位符发生无效参数错误。所以我在占位符中输入了所有的dtypeshapename,但我仍然得到无效参数错误 .

我想通过 FCL 模型制作新的 Signal(1, 222)。
输入信号(1, 222) => 输出信号(1, 222)

  • maxPredict:查找输出信号中具有最高值的索引。
  • 计算Y:获取maxPredict对应的频率数组值。
  • loss:使用真实 Y 与计算 Y 之间的差异作为损失。
  • loss = tf.abs(trueY - calculateY)`

代码(发生错误)
x = tf.placeholder(dtype=tf.float32, shape=[1, 222], name='inputX')

错误

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'inputX' with dtype float and shape [1,222] tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'inputX' with dtype float and shape [1,222] [[{{node inputX}} = Placeholderdtype=DT_FLOAT, shape=[1,222], _device="/job:localhost/replica:0/task:0/device:CPU:0"]] During handling of the above exception, another exception occurred:

新错误案例

我更改了我的代码。
x = tf.placeholder(tf.float32, [None, 222], name='inputX')

错误案例 1
tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32)
newY = tf.gather(tensorFreq, maxPredict) * 60
loss = tf.abs(y - tf.Variable(newY))

ValueError: initial_value must have a shape specified: Tensor("mul:0", shape=(?,), dtype=float32)

错误案例 2
tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32)
newY = tf.gather(tensorFreq, maxPredict) * 60
loss = tf.abs(y - newY)

Traceback (most recent call last): File "D:/PycharmProject/DetectionSignal/TEST_FCL_StackOverflow.py", line 127, in trainStep = opt.minimize(loss) File "C:\Users\Heewony\Anaconda3\envs\TSFW_pycharm\lib\site-packages\tensorflow\python\training\optimizer.py", line 407, in minimize ([str(v) for _, v in grads_and_vars], loss)) ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables [tf.Variable 'Variable:0' shape=(222, 1024) dtype=float32_ref, tf.Variable 'Variable_1:0' shape=(1024,) dtype=float32_re, ......... tf.Variable 'Variable_5:0' shape=(222,) dtype=float32_ref] and loss Tensor("Abs:0", dtype=float32).

开发环境

  • 操作系统平台和发行版:Windows 10 x64
  • TensorFlow 安装自:Anaconda
  • Tensorflow 版本 1.12.0:
  • python 3.6.7 :
  • 移动设备:不适用
  • 要复制的确切命令:N/A
  • GPU 型号和内存:NVIDIA GeForce CTX 1080 Ti
  • CUDA/cuDNN:9.0/7.4

型号与功能

def Model_FCL(inputX):
    data = inputX  # input Signals

    # Fully Connected Layer 1
    flatConvh1 = tf.reshape(data, [-1, 222])
    fcW1 = tf.Variable(tf.truncated_normal(shape=[222, 1024], stddev=0.05))
    fcb1 = tf.Variable(tf.constant(0.1, shape=[1024]))
    fch1 = tf.nn.relu(tf.matmul(flatConvh1, fcW1) + fcb1)

    # Fully Connected Layer 2
    flatConvh2 = tf.reshape(fch1, [-1, 1024])
    fcW2 = tf.Variable(tf.truncated_normal(shape=[1024, 1024], stddev=0.05))
    fcb2 = tf.Variable(tf.constant(0.1, shape=[1024]))
    fch2 = tf.nn.relu(tf.matmul(flatConvh2, fcW2) + fcb2)

    # Output Layer
    fcW3 = tf.Variable(tf.truncated_normal(shape=[1024, 222], stddev=0.05))
    fcb3 = tf.Variable(tf.constant(0.1, shape=[222]))

    logits = tf.add(tf.matmul(fch2, fcW3), fcb3)
    predictY = tf.nn.softmax(logits)
    return predictY, logits

def loadMatlabData(fileName):
    contentsMat = sio.loadmat(fileName)
    dataInput = contentsMat['dataInput']
    dataLabel = contentsMat['dataLabel']

    dataSize = dataInput.shape
    dataSize = dataSize[0]
    return dataInput, dataLabel, dataSize

def getNextSignal(num, data, labels, WINDOW_SIZE, OUTPUT_SIZE):
    shuffleSignal = data[num]
    shuffleLabels = labels[num]

    # shuffleSignal = shuffleSignal.reshape(1, WINDOW_SIZE)
    # shuffleSignal = np.asarray(shuffleSignal, np.float32)
    return shuffleSignal, shuffleLabels

def getBasicFrequency():
    # basicFreq => shape(222)
    basicFreq = np.array([0.598436736688, 0.610649731314, ... 3.297508549096])
    return basicFreq

图表

basicFreq = getBasicFrequency()
myGraph = tf.Graph()
with myGraph.as_default():
    # define input data & output data 입력받기 위한 placeholder
    x = tf.placeholder(dtype=tf.float32, shape=[1, 222], name='inputX') # Signal size = [1, 222]
    y = tf.placeholder(tf.float32, name='trueY') # Float value size = [1]

    print('inputzz ', x, y)
    print('Graph  ', myGraph.get_operations())
    print('TrainVariable ', tf.trainable_variables())

    predictY, logits = Model_FCL(x) # Predict Signal, size = [1, 222]
    maxPredict = tf.argmax(predictY, 1, name='maxPredict') # Find max index of Predict Signal

    tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32)
    newY = tf.gather(tensorFreq, maxPredict) * 60   # Find the value that corresponds to the Freq array index
    loss = tf.abs(y - tf.Variable(newY))  # Calculate absolute (true Y - predict Y)
    opt = tf.train.AdamOptimizer(learning_rate=0.0001)
    trainStep = opt.minimize(loss)

    print('Graph  ', myGraph.get_operations())
    print('TrainVariable ', tf.trainable_variables())  

session

with tf.Session(graph=myGraph) as sess:
    sess.run(tf.global_variables_initializer())

    dataFolder = './'
    writer = tf.summary.FileWriter('./logMyGraph', sess.graph)
    startTime = datetime.datetime.now()

    numberSummary = 0
    accuracyTotalTrain = []
    for trainEpoch in range(1, 25 + 1):
        arrayTrain = []

        dataPPG, dataLabel, dataSize = loadMatlabData(dataFolder + "TestValues.mat")

        for i in range(dataSize):
            batchSignal, valueTrue = getNextSignal(i, dataPPG, dataLabel, 222, 222)
            _, lossPrint, valuePredict = sess.run([trainStep, loss, newY], feed_dict={x: batchSignal, y: valueTrue})
            print('Train ', i, ' ', valueTrue, ' - ', valuePredict, '   Loss ', lossPrint)

            arrayTrain.append(lossPrint)
            writer.add_summary(tf.Summary(value=[tf.Summary.Value(tag='Loss', simple_value=float(lossPrint))]),
                               numberSummary)
            numberSummary += 1
        accuracyTotalTrain.append(np.mean(arrayTrain))
    print('Final Train : ', accuracyTotalTrain)

    sess.close()    

最佳答案

似乎变量 batchSignal 的类型或形状有误。它必须是形状完全为 [1, 222] 的 numpy 数组。如果要使用一批大小为 n × 222 的示例,占位符 x 的形状应为 [None, 222] 并且占位符 y 形状 [None].

顺便说一句,考虑使用tf.layers.dense而不是显式初始化变量并自己实现层。

关于python - 无效参数错误 : You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55608075/

相关文章:

python - Keras 值错误 : Dimensions must be equal issue

machine-learning - 如何从深度模型中获取输入图像的特征向量(softmax之前的N-1层的输出)?

通过代理进行基本身份验证的 Python HTTPS 客户端

python - 在 Python 中创建自定义等待条件

python - ImportError : No module named absl.测试

tensorflow - 如何通过 conda 安装 tensorflow 插件

python - 这是你分页的方式,还是有更好的算法?

python - 通过 pysftp 附加到 SFTP 服务器上的现有文件

python - TensorFlow conv2d的填充策略是什么?

python - 模块 'tensorflow' 没有属性 'log'