Q1:循环神经网络对可变长序列的处理
直接填充0
结论:在数据运算上是没有问题的,但是从序列的整个含义来说,是不合理的,一般情况不这么做。
tensorflow中处理可变长序列
tensorflow中对变长序列的输入是通过在dynamic_rnn()函数中的sequence_length参数来制定的,这个参数是一维数组,每一个数组的元素为所对应的timesteps数目,而填充的01根本没有参加运算,只不过是一个“空壳子”,为了保持数据的完整性而存在的。
keras对可变长序列的处理
使用Embedding层实现变长序列的输入
使用Masking层来处理可变序列
https://blog.csdn.net/qq_27825451/article/details/88991529
这个博客讲的非常详细,也有实验demo
tnsorflow2.0 实验标准步骤
数据集处理五步法
- 准备要加载的numpy数据
- 使用tf.data.Dataset.from_tensor_slices()函数进行加载
- shuffle()打乱数据
- 使用map()进行预处理
- 使用batch函数设置 batch size
- 根据需要使用 repeat()是否循环迭代数据集
keras中的非Sequential模型
在keras最常见的就是Sequential类型的模型,其特点是只有一个输入和输出,而且网络是层的线性堆叠。
函数式API
https://blog.csdn.net/bqw18744018044/article/details/83832002
这篇讲的也非常详细
Kears.metric.accuracy 总结
- 当你的标签和预测值都是具体的label index(如y_true=[1,2,1], y_pred=[0,1,1])时,用keras.metrics.accuracy
- 当你的标签是具体的label index,而prediction是向量形式(如y_true=[1, 2, 1], y_pred=[[0.2, 0.3, 0.5], [0.9, 0.1, 0], [0, 0.4, 0.6]])时,用keras.metrics.sparse_categorical_accuracy。
- 当你的标签是onehot形式,而prediction是向量形式(如y_true=[[0, 1, 0], [0, 0, 1], [0, 1, 0]], y_pred=[[0.2, 0.3, 0.5], [0.9, 0.1, 0], [0, 0.4, 0.6]])时,用keras.metrics.categorical_accuracy。
细枝末节
- tensorflow logits 经过神经网络输出之后,进入softmax之前。
- tf.argmax(vector, 1):返回的是vector中的最大值的索引号,如果vector是一个向量,那就返回一个值,如果是一个矩阵,那就返回一个向量,这个向量的每一个维度都是相对应矩阵行的最大值元素的索引号。
- tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值。
- categorical_crossentropy 和 sparse_categorical_crossentropy 的区别在哪?如果你的 targets 是 one-hot 编码,用 categorical_crossentropy one-hot 编码:[0, 0, 1], [1, 0, 0], [0, 1, 0]。如果你的 tagets 是 数字编码 ,用 sparse_categorical_crossentropy。