【问题标题】:Input to reshape is a tensor with 788175 values, but the requested shape has 1050900reshape 的输入是一个具有 788175 个值的张量,但请求的形状有 1050900
【发布时间】:2019-08-22 10:52:16
【问题描述】:

我正在导入一些数据数组以进行训练,但 tensorflow 输出低于错误。

inp = open('train.csv',"rb")
X = pickle.load(inp)
X = X/255.0
X = np.array(X)
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(113, 75, 3)),
    keras.layers.Dense(75, activation=tf.nn.relu),
    keras.layers.Dense(50, activation=tf.nn.relu),
    keras.layers.Dense(75, activation=tf.nn.relu),
    keras.layers.Dense(25425, activation=tf.nn.softmax),
    keras.layers.Reshape((113, 75, 4))
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(X, X, epochs=5)

我应该能够创建一个自动编码器,但程序会输出以下内容: Traceback(最近一次调用最后一次):

File "C:\Users\dalto\Documents\geo4\train.py", line 24, in <module>
    model.fit(X, X, epochs=5)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 643, in fit
    use_multiprocessing=use_multiprocessing)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 664, in fit
    steps_name='steps_per_epoch')
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 383, in model_iteration
    batch_outs = f(ins_batch)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\backend.py", line 3510, in __call__
    outputs = self._graph_fn(*converted_inputs)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 572, in __call__
    return self._call_flat(args)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 671, in _call_flat
    outputs = self._inference_function.call(ctx, args)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 445, in call
    ctx=ctx)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Input to reshape is a tensor with 788175 values, but the requested shape has 1050900
     [[node reshape/Reshape (defined at C:\Users\dalto\Documents\geo4\train.py:24) ]] [Op:__inference_keras_scratch_graph_922]

Function call stack:
keras_scratch_graph

如果我将 Reshape 更改为 (113, 75, 3) 我得到了它并不能修复错误它只是更改它:

Traceback (most recent call last):
  File "C:\Users\dalto\Documents\geo4\train.py", line 24, in <module>
    model.fit(X, X, epochs=5)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 643, in fit
use_multiprocessing=use_multiprocessing)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 664, in fit
steps_name='steps_per_epoch')
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 383, in model_iteration
    batch_outs = f(ins_batch)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\backend.py", line 3510, in __call__
outputs = self._graph_fn(*converted_inputs)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 572, in __call__
return self._call_flat(args)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 671, in _call_flat
outputs = self._inference_function.call(ctx, args)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 445, in call
ctx=ctx)
  File "C:\Users\dalto\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\execute.py", line 67, in quick_execute
six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Incompatible 
shapes: [31,113,75] vs. [31,113,75,3]
 [[node metrics/accuracy/Equal (defined at 
C:\Users\dalto\Documents\geo4\train.py:24) ]] [Op:__inference_keras_scratch_graph_922]

【问题讨论】:

  • 输入形状为(113,75,3)。输出为(113,75,4)。解决这个问题可能会有所帮助。
  • 它给了我一个完全不同的错误。
  • 如果你将输出重塑为 [x,y,z] 那么x*y*z 必须等于之前的层大小。在你的情况下25425 != 113*745*4 = 33900。 @user2653663 是对的,使用(113,75,3)

标签: python-3.x tensorflow autoencoder


【解决方案1】:

reshape 后的输入和输出大小必须相同。因此,您必须使用(113, 75, 3) 而不是(113, 75, 4)

现在,通过使用(113, 75, 3),您会得到不相等的错误,因为您使用sparse_categorical_crossentropy 作为损失函数,您应该改用categorical_crossentropy

它们之间的基本区别在于,sparse_categorical_crossentropy 在您使用直接整数作为标签时起作用,而categorical_crossentropy 在您使用 one-hot 编码标签时起作用。

更正:

inp = open('train.csv',"rb")
X = pickle.load(inp)
X = X/255.0
X = np.array(X)
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(113, 75, 3)),
    keras.layers.Dense(75, activation=tf.nn.relu),
    keras.layers.Dense(50, activation=tf.nn.relu),
    keras.layers.Dense(75, activation=tf.nn.relu),
    keras.layers.Dense(25425, activation=tf.nn.softmax),
    keras.layers.Reshape((113, 75, 4))
])
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(X, X, epochs=5)

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2017-06-26
    • 2023-01-30
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多