繁体   English   中英

重塑的输入是张量为788175的张量,但请求的形状为1050900

[英]Input to reshape is a tensor with 788175 values, but the requested shape has 1050900

我正在导入一些要训练的数据数组,但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

如果我将“重塑”更改为(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)

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

两者之间的基本区别在于,当您使用直接整数作为标签时, sparse_categorical_crossentropy起作用;而当您使用一键编码的标签时, categorical_crossentropy起作用。

更正:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM