Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Не понял, умеет ли линейная регрессия работать с векторами и тензорами, а не только скалярами
- # и решил попробовать регрессию из tensorflow, благо, она точн с тензорами работает
- # Сделал тензоры из векторов описаний (X) и изображений (Y)
- X = tf.convert_to_tensor(np.stack(X_train))
- Y = tf.convert_to_tensor(np.stack(y_train.apply(lambda x: x.T.flatten())))
- X.shape
- > TensorShape([493, 1338])
- Y.shape
- > TensorShape([493, 1338])
- # Завел переменные весов и смещений, vector_size=1338
- W = tf.Variable(np.random.randn(1, vector_size), name="W")
- b = tf.Variable(np.random.randn(1, vector_size), name="b")
- def y_pred(x):
- """Задаём линейную зависимость между входом и выходом"""
- return tf.add(tf.multiply(x, W), b)
- def cost():
- """в качестве меры используем MSE"""
- cost = tf.reduce_sum(tf.pow(y_pred(X) - Y, 2)) / (2 * n)
- return cost
- optimizer = tf.keras.optimizers.Adam(learning_rate)
- # Инициализируем веса и смещение
- pred = y_pred(X)
- trainable_vars = [W, b]
- # когда начал обучать, вылетела ошибка
- for epoch in range(epochs):
- optimizer.minimize(cost, trainable_vars)
- pred = y_pred(X)
- if (epoch + 1) % 50 == 0:
- c = cost()
- print("Epoch", (epoch + 1), ": cost =", c.numpy(), "W =", W.numpy(), "b =", b.numpy() )
- ### Error message
- # Очевидно, функции потерь не нравится многомерность X и Y. Как с этим справиться? Как вообще обучить линрег на векторах вместо скаляров?
- ---------------------------------------------------------------------------
- InvalidArgumentError Traceback (most recent call last)
- Cell In [160], line 2
- 1 for epoch in range(epochs):
- ----> 2 optimizer.minimize(cost, trainable_vars)
- 3 pred = y_pred(X)
- 4 if (epoch + 1) % 50 == 0:
- File ~/.local/share/virtualenvs/00_Praktikum-W4BAQCOP/lib/python3.10/site-packages/keras/optimizers/optimizer_v2/optimizer_v2.py:576, in OptimizerV2.minimize(self, loss, var_list, grad_loss, name, tape)
- 545 def minimize(self, loss, var_list, grad_loss=None, name=None, tape=None):
- 546 """Minimize `loss` by updating `var_list`.
- 547
- 548 This method simply computes gradient using `tf.GradientTape` and calls
- (...)
- 574
- 575 """
- --> 576 grads_and_vars = self._compute_gradients(
- 577 loss, var_list=var_list, grad_loss=grad_loss, tape=tape
- 578 )
- 579 return self.apply_gradients(grads_and_vars, name=name)
- File ~/.local/share/virtualenvs/00_Praktikum-W4BAQCOP/lib/python3.10/site-packages/keras/optimizers/optimizer_v2/optimizer_v2.py:625, in OptimizerV2._compute_gradients(self, loss, var_list, grad_loss, tape)
- 623 if not callable(var_list):
- 624 tape.watch(var_list)
- --> 625 loss = loss()
- 626 if callable(var_list):
- 627 var_list = var_list()
- Cell In [135], line 8, in cost()
- 6 def cost():
- 7 """в качестве меры используем MSE"""
- ----> 8 cost = tf.reduce_sum(tf.pow(y_pred(X) - Y, 2)) / (2 * n)
- 9 return cost
- File ~/.local/share/virtualenvs/00_Praktikum-W4BAQCOP/lib/python3.10/site-packages/tensorflow/python/util/traceback_utils.py:153, in filter_traceback.<locals>.error_handler(*args, **kwargs)
- 151 except Exception as e:
- 152 filtered_tb = _process_traceback_frames(e.__traceback__)
- --> 153 raise e.with_traceback(filtered_tb) from None
- 154 finally:
- 155 del filtered_tb
- File ~/.local/share/virtualenvs/00_Praktikum-W4BAQCOP/lib/python3.10/site-packages/tensorflow/python/framework/ops.py:7209, in raise_from_not_ok_status(e, name)
- 7207 def raise_from_not_ok_status(e, name):
- 7208 e.message += (" name: " + name if name is not None else "")
- -> 7209 raise core._status_to_exception(e) from None
- InvalidArgumentError: cannot compute Sub as input #1(zero-based) was expected to be a double tensor but is a float tensor [Op:Sub]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement