这个问题怎么解决,请问各位

img

img


这个问题怎么解决,关于tsne降维成二维的问题,说是符号变量传递给控制流时发生错误,改了很久没结果

img

看了下,应该是assert检查这块错了。


assert H=self.img_size[0] and W=self.img_size[1],\

这行可能错了,assert 语句试图把一个 Proxy 对象转换为一个布尔值,这是无法进行的,因为在符号追踪中 Proxy 对象并没有具体的值。
在模型的 forward 函数中去掉 assert 语句,或者将其替换为一个可以在符号追踪中处理的操作。


如果有帮助,请点击一下采纳该答案~谢谢

TraceError : symbolically traced variables cannot be used as inputs to control flow
TraceError:符号跟踪变量不能用作控制流的输入
这个错误通常发生在 tsne 算法中
因为符号变量在tsne 中用于表示变量之间的依赖关系,但是它们不能直接用于控制流。

可参考下面思路:
1、将符号变量转换为常量,从而让它们直接用于控制流,避免控制流错误。例如,您可以将符号变量的值设置为 0,并将其作为常量传递给 tsne 的 "data" 参数。
2、使用 "data" 参数的 "requires_grad" 属性:在 tsne 中,"data" 参数的 "requires_grad" 属性可以控制符号变量的计算。可以将 "requires_grad" 属性设置为 True,从而确保符号变量的值可以被计算。然后,将符号变量的值作为 "data" 参数的输入,并在计算过程中使用它们。

举个例子

1.把一个六维数据降成二维并输出
1.1导包

from sklearn.manifold import TSNE
import pandas as pd
1
2
1.2读取原来的数据

df = pd.read_csv(r'F:\kaiti\data\v1\samples_v1.csv')
df = df.values
1
2
输出:

[[100.   37.1 100.  114.   15. ]
 [100.   37.1 100.  114.   15. ]
 [101.   37.1 100.  113.   15. ]
 ...
 [100.   37.  100.  125.   15. ]
 [100.   37.  100.  125.   15. ]
 [100.   37.  100.  125.   15. ]]
1
2
3
4
5
6
7
1.3使用TSNE方法

df_embedded = TSNE(n_components=2).fit_transform(df)
print(df_embedded )
1
2
降维后的输出:

[[  8.707714  -27.801292 ]
 [  8.707714  -27.801294 ]
 [ 12.230482  -22.200832 ]
 ...
 [-84.6744     -7.6615276]
 [-84.67118    -7.6608477]
 [-84.67118    -7.6608477]]


在使用t-SNE降维时出现符号变量传递给控制流时发生错误,可能是因为输入的数据类型不匹配或者其他因素导致函数调用出错。可以尝试一下方法:

  1. 确认输入数据包含的变量类型。可能是因为输入的数据类型不匹配导致调用t-SNE函数出错,可以在输入数据类型与函数参数类型之间进行转换,确保类型匹配。

  2. 检查输入数据的维度。t-SNE只能处理高维数据,如果输入数据的维度过低,t-SNE无法进行降维处理,可能会出现符号变量传递给控制流时发生错误的情况。

  3. 检查t-SNE函数的参数设置。确保参数的取值范围正确,特别是在降维操作时,需要设置输出维度为2维。

  4. 尝试修改其他参数。比如,调整学习率(lr)和迭代次数(n_iter)参数,看看是否能够解决错误。

  • 建议你看下这篇博客👉 :人脸图像聚类实战及TSNE可视化分析
  • 除此之外, 这篇博客: 短评论聚类并显示提取属性中的 TSNE降维 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 降维成2维数据以便聚类,DBSCAN聚类对高维数据效果不好。使用linux可加速降维过程,Windows C编译器无法使用

  • 以下回答由chatgpt基于相关博客总结生成:

    对于符号变量传递给控制流的错误,可能的原因是数据类型不匹配,需要进行数据转换。建议检查代码部分,确定数据类型是否正确。另外,还需要检查数据的维度是否正确,是否存在缺失值等问题。

    具体的解决方案如下:

    1. 检查数据的类型:将数据类型转换为正确的类型,比如将字符串转换为整数或浮点数。

    2. 检查数据的维度:确认输入数据的维度是否与算法要求的维度相同。如果不同需要进行处理。

    3. 检查是否存在缺失值:检查输入数据是否有缺失值。如果存在缺失值,则需要进行填充操作。

    4. 检查算法的参数:确认算法的参数是否正确设置。比如,学习率或迭代次数是否合理。

    5. 可视化结果:通过可视化结果,查看算法的降维效果和是否存在异常点。

    综上所述,需要仔细检查数据类型、数据维度、缺失值、算法参数等方面,确保代码正确性。如果有需要,可以对代码进行修改和调整。

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

这个是个密码重置的问题。用户密码忘记后,要通过邮箱重置密码,但是邮件中的链接总是提示“链接已过期”。

这通常有几个可能的原因:

  1. 链接在邮件发送后过期时间设置太短。很多网站为了安全考虑,会将密码重置链接的有效期设置为1-2小时。如果用户看邮件的时间超过了这个期限,链接自然就过期了。
  2. 邮件被错分为垃圾邮件。如果邮件中的链接设置了较短过期时间,邮件有可能在用户查看前就被错误分配到垃圾箱,导致用户没能及时点击链接。
  3. 链接实际上可以使用,但由于浏览器缓存的设置问题无法检测到链接可用性。有些情况下由于浏览器的缓存机制,会错误判断链接已过期,刷新页面后会恢复正常。
  4. 实际上有bug导致链接过早过期。实际实现中的bug也可能会导致链接过期时间不正确,在期限内就提示过期。

针对这几种情况,你可以:

  1. 邮件中的链接延长有效期至12-24小时,给用户更长的查看和点击时间。
  2. 重置邮件中的链接,生成一个全新的链接发送给用户。旧链接由于时间原因可能实际上已失效,新链接可以避免此问题。
  3. 在邮件中提示用户如果链接过期可以点击重置密码页面的重发邮件按钮获取新链接。这可以方便用户即使链接过期也能继续重置密码。
  4. 检查链接过期时间的实现逻辑,确保时间正确及没有其他bug导致过早过期。这需要代码层面的检查和解决。
  5. 建议用户先检查自己的垃圾邮件箱,确保邮件没有被错分。如果邮件已经无法查看,可以使用重发邮件来重新获取一个新链接。

总之,你需要通过延长链接有效时间、重新生成链接、提供重发邮件等方式给用户更多机会点击链接完成密码重置。同时也需要检查自身系统及代码,确保不存在导致过期判断错误的bug。这些措施综合可以有效解决此类密码重置链接过期的问题。