【问题标题】:ValueError: Cannot feed value of shape (2, 1000, 1) for Tensor 'Placeholder:0', which has shape '(?, 2)'ValueError:无法为具有形状“(?,2)”的张量“Placeholder:0”提供形状(2、1000、1)的值
【发布时间】:2018-12-15 07:17:00
【问题描述】:

我对此有误:

C:\Users\Akash\PycharmProjects\TensorFlow_lessons\venv\Scripts\python.exe C:/Users/Akash/PycharmProjects/TensorFlow_lessons/TenFlow_01.py 2018-07-06 16:15:56.929521: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] 您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX2 回溯(最近一次通话最后): 文件“C:/Users/Akash/PycharmProjects/TensorFlow_lessons/TenFlow_01.py”,第 45 行,在 feed_dict={输入:training_data['inputs'],targets:training_data['targets']}) 运行中的文件“C:\Users\Akash\PycharmProjects\TensorFlow_lessons\venv\lib\site-packages\tensorflow\python\client\session.py”,第 900 行 run_metadata_ptr) 文件“C:\Users\Akash\PycharmProjects\TensorFlow_lessons\venv\lib\site-packages\tensorflow\python\client\session.py”,第 1111 行,在 _run str(subfeed_t.get_shape()))) ValueError: 无法为形状为“(?, 2)”的张量“Placeholder:0”提供形状 (2, 1000, 1) 的值

进程以退出代码 1 结束

我的代码:

import numpy as np
import tensorflow as tf

"""Data generation"""
obs = 1000
xs = np.random.uniform(-10, 10, (obs, 1))
zs = np.random.uniform(-10, 10, (obs, 1))
generated_inputs = np.stack((xs, zs))
noise = np.random.uniform(-1, 1, (obs, 1))
generated_targets = 2 * xs - 3 * zs + 5 + noise

np.savez('TF_Intro', inputs=generated_inputs, targets=generated_targets)

# solving with tensorflow
input_size = 2
output_size = 1

# outlining the model
inputs = tf.placeholder('float', [None, input_size])  # feeds data to TF_intro file's input column
targets = tf.placeholder('float', [None, output_size])  # same as above to output column

weights = tf.Variable(tf.random_uniform([input_size, output_size], minval=-0.1, maxval=0.1))
biases = tf.Variable(tf.random_uniform([output_size], minval=-0.1, maxval=0.1))

outputs = tf.matmul(inputs, weights) + biases  # matmul is same concpt like dotproduct but its for tensors

"""Choosing objective function and optimization methods"""
mean_loss = tf.losses.mean_squared_error(labels=targets, predictions=outputs) / 2.
optimize = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(mean_loss)

"""prepare for execute"""
sess = tf.InteractiveSession()

"""initialisation of variables"""
initializer = tf.global_variables_initializer()  # initialises all tensor objects marked as variables
sess.run(initializer)

"""Load training data"""
training_data = np.load('TF_Intro.npz')

"""learning"""
for e in range(100):
    _, curr_loss = sess.run([optimize, mean_loss],
                            feed_dict={inputs: training_data['inputs'],
                                       targets: training_data['targets']})
    print(curr_loss)

【问题讨论】:

    标签: python numpy tensorflow pycharm anaconda


    【解决方案1】:

    当您遇到与张量形状不匹配有关的错误时,请仔细阅读错误消息:

    ValueError: 无法为形状为“(?, 2)”的张量“Placeholder:0”提供形状 (2, 1000, 1) 的值

    如果您稍微调试一下代码,您会立即注意到错误是由于training_data['inputs'] 的形状为(2, 1000, 1)inputs 的形状为(?, 2)。鉴于它们具有不同的形状,您不能“喂”training_data['inputs']inputs

    这个问题的解决方案取决于你真正想要做什么

    如果您想“连接”xszs,而不是使用generated_inputs = np.stack((xs, zs)),您需要generated_inputs = tf.concat([xs, zs], 1)。在这种情况下,generated_inputs 的形状为 (1000, 2),因此它可以作为 inputs(形状为 (?, 2))提供。

    但是,如果将generated_inputs = np.stack((xs, zs)) 替换为generated_inputs = tf.concat([xs, zs], 1),则会出现另一个错误:

    _pickle.PicklingError: Can't pickle : 属性查找 SwigPyObject on builtins 失败

    这可能是因为您使用np.savez 保存的数组/变量必须具有相同的维度(或者可能是因为我们会尝试保存矩阵?)。你可以解决这个问题,例如通过分别保存xszs。因此,您可能拥有np.savez('TF_Intro', xs=xs, zs=zs, targets=generated_targets),而不是np.savez('TF_Intro', inputs = generated_inputs, targets=generated_targets)。然后,在执行run 方法之前(在会话中),您可以连接xszs。比如使用下面的代码

    ...
    
    for e in range(100):
        xs = training_data['xs']
        zs = training_data['zs']
        X = np.concatenate((xs, zs), axis=1)
        T = training_data['targets']
    
        _, curr_loss = sess.run([optimize, mean_loss],
                                feed_dict={inputs: X,
                                           targets: T})
        print(curr_loss)
    

    注意:如果您执行我建议的更改,您的代码将编译并执行而不会出错,但我不知道这是否是您想要通过代码实现的目标,我不知道不想多说。

    顺便问一下,你为什么要生成输入和目标,存储它们,然后从文件中读取它们?为什么不直接使用输入和目标(在这种情况下)?

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2022-01-09
      • 2019-03-20
      • 2018-08-03
      • 2017-10-28
      • 2020-03-27
      相关资源
      最近更新 更多