我正在使用一些通用结构,如下所示:
pub struct Example<A, B, C, D, E, F> {
inner: OtherExample<A, B, C, D, E, F>
...
}
Run Code Online (Sandbox Code Playgroud)
在该结构的整个实现方法中,我必须不断引用这一巨大的类型集,如下所示:
impl<A, B, C, D, E, F> Example<A, B, C, D, E, F> {
pub fn get_inner(&self) -> &OtherExample<A, B, C, D, E, F> {
&self.inner
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以缩短所有这些通用类型的符号。为了便于阅读,我不能像上面的示例中那样只使用单个字母,所以我真的想在结构中创建一个泛型类型别名,如下所示:
pub struct Example<AliasedGenerics = <A, B, C, D, E, F>> {
inner: OtherExample<AliasedGenerics>
...
}
impl<AliasedGenerics = <A, B, C, D, E, F>> Example<AliasedGenerics> {
pub fn get_inner(&self) -> &OtherExample<AliasedGenerics> { …Run Code Online (Sandbox Code Playgroud) 在 Python 中的 Tensorflow 2.0 中训练神经网络时,我注意到训练精度和损失在不同时期之间发生了巨大变化。我知道打印的指标是整个 epoch 的平均值,但在每个 epoch 之后准确率似乎显着下降,尽管平均值总是在增加。
损失也表现出这种行为,每个时期显着下降,但平均值增加。这是我的意思的图像(来自 Tensorboard):
我在我自己实现的所有模型上都注意到了这种行为,所以这可能是一个错误,但我想就这是否是正常行为以及如果是这样意味着什么?
另外,我使用了一个相当大的数据集(大约 300 万个示例)。批次大小为 32,准确率/损失图中的每个点代表 50 个批次(图中 2k = 100k 批次)。批次的学习率图是 1:1。
我正在尝试从由一维数值数据张量组成的 Tensorflow 数据集创建数据输入管道。我想创建一批不规则的张量;我不想填充数据。
例如,如果我的数据采用以下形式:
[
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4]
...
]
Run Code Online (Sandbox Code Playgroud)
我希望我的数据集由以下形式的批次组成:
<tf.Tensor [
<tf.RaggedTensor [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4],
...]>,
<tf.RaggedTensor [
[ ... ],
...]>
]>
Run Code Online (Sandbox Code Playgroud)
我尝试过RaggedTensor使用地图创建一个,但似乎无法在一维数据上执行此操作。
我试图创建一个特征,它只是其他特征的组合,最终目标是创建一个特征来证明类型是一个大小的数组。
此外,我希望能够在没有额外库的情况下在稳定的 Rust 中做到这一点。
我尝试添加一堆特征边界来模拟固定大小数组的限制,如下所示:
trait SizedArray<T>
where
T: Sized + Eq + Copy + Clone,
{
}
impl<T> SizedArray<T> for [T; 32] where T: Sized + Eq + Copy + Clone {}
fn processArray<T, U>(array: T)
where
T: SizedArray<U>,
U: Sized + Eq + Copy + Clone,
{
let a = array[0];
for i in array.iter() {
let size = array.len();
/* do something with the array */
}
}
fn main() {
let array = [0u8; 32];
processArray(array); …Run Code Online (Sandbox Code Playgroud)