1.张量和操作
tensorflow对张量的操作实际上和numpy差不多,不够有所差距,numpy的数据可以随时被修改,但是tensorflow的数据要分情况。
(1).使用tf.Constant()
除了不能修改,其实和numpy的使用方法
比如查看它的大小也可以用:a.shape
索引方式也一样,这里不做过得描述
(2).tensorflow提供的数据操作函数
比如加法: a + 10 可以使用函数 tf.add(a, 10);
矩阵的乘法为tf.matmul(),它提供的函数和numpy都差不多,但是有些不一样,比如求和.tf.reduce_sum(),求均值为tf.reduce_mean(),求最大值tf.reduce_max();
numpy也可以用于tensorflow中,转换为张量。
(3)类型转换
tensorflow中有个很麻烦的东西,整形+浮点型会失败,float32和float64相加也会失败,它不会自动执行类型转换,需要你手动操作。
(4).变量
tf.Constant无法被改变,固定好深度学习的参数后,可以使用这个类型的变量,但是如果需要对它进行训练,则必须要使用tf.Variable
我们对tf.Variable的修改也需要使用特定的函数assign
这样a的第一个值就变为了10,这个就相当于a[0,0] = 10
麻烦就是这个啦,必须通过相应的函数来操作;
(5).其他数据结构
tensorflow还有其他数据结构,比如稀疏张量(tf.SparseTensor),张量数组(tf.TensorArrray),不规则张量(tf.RaggedTensor),字符串张量(tf.string)等等
2.定制模型和算法
1.自定义损失函数
比如自定义一个Huber
可以在Keras模型中使用这个函数
2.保存和加载自定义组件的模型
keras会保存函数的名字,每次加载的适合需要提供一个字典,将函数名称映射到实际函数。一般而言,当加载包含自定义对象的模式时,需要将名称映射到对象。
如果需要更为灵活的函数,设定上面函数的阈值,不仅仅等于1
还可以通过继承keras.losses.Loss类的子类,然后实现get_config()方法来解决问题
比如自定义激活函数,初始化方法,正则化和约束。
如果函数需要和模型一起保存,必须继承相应的对象,比如keras.regularizers.Regularizer,