Вы также можете использовать метод compareTo()
для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.
==
сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern()
, вы можете использовать оператор ==
для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.
Измените это
t_x1=x1.view(10,30,1)
на
t_x1=x1.view(150,150,1)
и попробуйте
Учитывая, что вы используете batch_first=True
и предполагаете, что размер пакета равен 10, (10, 30, 1)
как форма ввода верна, так как это (batch_size, seq_len, input_size)
.
Вопрос в том, откуда берется 150
. Какова форма x1
, прежде чем пытаться применить .view(...)
? Можете ли вы проверить следующее:
for i,(x1,y1) in enumerate(trainloader):
print(x1.shape)
...
Интуитивно, это должно быть что-то вроде (10, ???)
, так как вы установили 10 как размер пакета. Прямо сейчас я предполагаю, что что-то с вами на тренировках и тестовых данных отключено.
Из документации метода view (), «Возвращенный тензор разделяет одни и те же данные, и должен иметь одинаковое количество элементов , но может иметь другой размер.» [ 113]
x1 = torch.randn((150,))
t_x1 = x1.view(10,30,1)
RuntimeError: форма '[10, 30, 1]' недопустима для ввода размера 150
Это потому, что 150! = 10 * 30. Если вы хотите использовать 30 раз шаг, тогда ваш размер выборки должен быть 150/30 = 5. Итак, правильный путь -
t_x1 = x1.view(5,30,1)