Aprendizaje profundo: hablar sobre la diferencia entre los métodos remodelar () y ver () de antorcha y numpy

Conclusión: remodelar, ya sea numpy.array o torch.Tensor, reorganiza los datos según el orden de las filas.reshape puede modificar las dimensiones de los datos originales
, pero debe tenerse en cuenta que
Tensor.reshape(*shape);
array.reshape(shape, order= '
significa array.reshape (forma=(-1, 2, 3, 2)); Tensor.reshape(-1, 2, 3, 2)

Una palabra más:
los métodos view() y reshape() de la antorcha se pueden usar para remodelar la forma del tensor (nota: view() en numpy no es un método para remodelar datos, pero cambiará el tipo de datos y devolverá un método de copia, no t usarlo en el lugar equivocado) ,
la diferencia entre view() y remodelar() es que las condiciones utilizadas son diferentes .
El método view() solo es aplicable a los tensores que cumplen las condiciones de continuidad , y esta operación no abre un nuevo espacio de memoria , sino que solo genera un nuevo alias y una referencia al espacio de almacenamiento original, y el valor de retorno es una vista.
El valor de retorno del método remodelar() puede ser una vista o una copia. Cuando se cumple la condición de continuidad, se devuelve la vista, de lo contrario se devuelve una copia [esto es equivalente al método contiguo().vista( ) , pero la diferencia es que la remodelación abrirá un nuevo espacio de memoria para guardar los datos de la remodelación ].
Conclusión:
Entonces, cuando no esté seguro de poder usar la vista, puede usar reformar.
Si solo desea simplemente remodelar la forma de un tensor, use remodelar,
pero si necesita considerar la sobrecarga de memoria y asegurarse de que el tensor remodelado comparte espacio de almacenamiento con el tensor anterior , entonces use view().

1, remodelar (-1)

print("===================test reshape(-1)==============================")
test_arr = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(test_arr)
print(test_arr.reshape(-1))
test_arr = torch.Tensor([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])
print(test_arr)
print(test_arr.reshape(-1))

Resultado: los datos se estiran en el orden de las filas

===================test reshape(-1)==============================
tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
tensor([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.],
        [10., 11., 12.]])
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
[ 1  4  7 10  2  5  8 11  3  6  9 12]

2. La dimensión de la remodelación permanece sin cambios.

print("===================test reshape==============================")
test_arr = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(test_arr)
print(test_arr.reshape(-1, 3))
test_arr = np.array([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])
print(test_arr)
print(test_arr.reshape(-1, 3))

Resultado: reorganizar los datos en el orden de las filas

===================test reshape==============================
tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
tensor([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.],
        [10., 11., 12.]])
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
[[ 1  4  7]
 [10  2  5]
 [ 8 11  3]
 [ 6  9 12]]

3. remodelar agrega una dimensión

print("===================test reshape==============================")
test_arr = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(test_arr)
print(test_arr.reshape(-1, 2, 3, 2))
test_arr = np.array([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])
print(test_arr)
print(test_arr.reshape((-1, 2, 3, 2)))

Resultado: reorganizar los datos en el orden de las filas

===================test reshape==============================
tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
tensor([[[[ 1.,  2.],
          [ 3.,  4.],
          [ 5.,  6.]],

         [[ 7.,  8.],
          [ 9., 10.],
          [11., 12.]]]])
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
[[[[ 1  4]
   [ 7 10]
   [ 2  5]]

  [[ 8 11]
   [ 3  6]
   [ 9 12]]]]

Supongo que te gusta

Origin blog.csdn.net/weixin_50727642/article/details/123000495
Recomendado
Clasificación