tensorflow 2.0入门(一)

1.0的大部分函数都在compat.v1里 注意Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产。keras的3个优点: 方便用户使用、模块化和可组合、易于扩展1.导入tf.kerastensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本可能和keras不同...
摘要由CSDN通过智能技术生成

 

1.0的大部分函数都在compat.v1里 注意

Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产。

keras的3个优点: 方便用户使用、模块化和可组合、易于扩展

1.导入tf.keras

tensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本可能和keras不同)

import tensorflow as tf
from tensorflow.keras import layers
print(tf.__version__)
print(tf.keras.__version__)

2.1模型堆叠

最常见的模型类型是层的堆叠:tf.keras.Sequential 模型

model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

2.2网络配置

tf.keras.layers中网络配置:

activation:设置层的激活函数。此参数由内置函数的名称指定,或指定为可调用对象。默认情况下,系统不会应用任何激活函数。

kernel_initializer 和 bias_initializer:创建层权重(核和偏差)的初始化方案。此参数是一个名称或可调用对象,默认为 "Glorot uniform" 初始化器。

kernel_regularizer 和 bias_regularizer:应用层权重(核和偏差)的正则化方案,例如 L1 或 L2 正则化。默认情况下,系统不会应用正则化函数。

layers.Dense(32,activation='sigmoid')
layers.Dense(32,activation=tf.sigmoid)
layers.Dense(32,kernel_initializer='orthogonal')
layers.Dense(32,kernel_initializer=tf.keras.initializers.glorot_normal)
layers.Dense(32,kernel_regularizer=tf.keras.regularizers.l2(0.01))
layers.Dense(32,kernel_regularizer=tf.keras.regularizers.l1(0.01))

 

3.1设置训练流程

构建好模型后,通过调用 compile 方法配置该模型的学习流程:

model.compile(opimizer=tf.keras.optimizers.Adam(0.0001),loss=tf.keras.losses.categorical_crossentropy,metrics=[tf.keras.metrics.categorical_accuracy])
  • optimizer:优化器,为预定义优化器名或优化器对象,参考优化器

  • loss:损失函数,为预定义损失函数名或一个目标函数,参考损失函数

  • metrics:列表,包含评估模型在训练和测试时的性能的指标,典型用法是metrics=['accuracy']如果要在多输出模型中为不同的输出指定不同的指标,可像该参数传递一个字典,例如metrics={'ouput_a': 'accuracy'}

Adam

keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)

该优化器的默认值来源于参考文献

参数

  • lr:大或等于0的浮点数,学习率

  • beta_1/beta_2:浮点数, 0<beta<1,通常很接近1

  • epsilon:大或等于0的小浮点数,防止除0错

categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列

 

 

3.2输入Numpy数据

train_x=np.random.random((1000,72))
print(train_x)
train_y=np.random.random((1000,10))
print(train_y)
val_x=np.random.random((200,72))
val_y=np.random.random((200,10))
model.fit(train_x,train_y,epochs=10,batch_size=100,validation_data=(val_x,val_y))
结果
[[0.11820663 0.94687871 0.00389739 ... 0.22155272 0.29681935 0.60627994]
 [0.96631981 0.1482917  0.7647889  ... 0.6244484  0.69359297 0.11097865]
 [0.94654439 0.39329305 0.924768   ... 0.73340685 0.38603478 0.76039963]
 ...
 [0.42359184 0.65312344 0.44496884 ... 0.99285447 0.7378497  0.22726322]
 [0.17082303 0.35306457 0.77977173 ... 0.90761928 0.35440392 0.62536818]
 [0.72042294 0.72147446 0.12456619 ... 0.74520036 0.87208645 0.99526475]]
[[0.1486994  0.40280167 0.72326973 ... 0.83066361 0.16453877 0.20162629]
 [0.46275405 0.70018658 0.62302286 ... 0.56637646 0.6511562  0.9804428 ]
 [0.7879093  0.28244817 0.19121216 ... 0.2003794  0.05078364 0.4749069 ]
 ...
 [0.15781835 0.41500622 0.06888127 ... 0.42818173 0.06826789 0.10388676]
 [0.64565501 0.94975161 0.74763059 ... 0.01787272 0.99154658 0.33656189]
 [0.33979661 0.45926962 0.13909528 ... 0.44406132 0.9037936  0.78635022]]
Train on 1000 samples, validate on 200 samples
Epoch 1/10
1000/1000 [==============================] - 1s 719us/sample - loss: 12.2055 - categorical_accuracy: 0.1050 - val_loss: 13.0319 - val_categorical_accuracy: 0.1450
Epoch 2/10
1000/1000 [==============================] - 0s 17us/sample - loss: 13.0102 - categorical_accuracy: 0.1020 - val_loss: 13.8851 - val_categorical_accuracy: 0.1100
Epoch 3/10
1000/1000 [==============================] - 0s 11us/sample - loss: 13.9417 - categorical_accuracy: 0.0940 - val_loss: 15.1144 - val_categorical_accuracy: 0.0900
Epoch 4/10
1000/1000 [==============================] - 0s 14us/sample - loss: 15.5418 - categorical_accuracy: 0.0820 - val_loss: 17.5391 - val_categorical_accuracy: 0.1300
Epoch 5/10
1000/1000 [==============================] - 0s 14us/sample - loss: 18.4056 - categorical_accuracy: 0.1010 - val_loss: 21.1930 - val_categorical_accuracy: 0.1300
Epoch 6/10
1000/1000 [==============================] - 0s 12us/sample - loss: 22.3117 - categorical_accuracy: 0.0990 - val_loss: 25.8592 - val_categorical_accuracy: 0.1350
Epoch 7/10
1000/1000 [==============================] - 0s 16us/sample - loss: 27.1278 - categorical_accuracy: 0.0970 - val_loss: 31.3902 - val_categorical_accuracy: 0.1250
Epoch 8/10
1000/1000 [==============================] - 0s 11us/sample - loss: 32.7654 - categorical_accuracy: 0.0970 - val_loss: 37.4707 - val_categorical_accuracy: 0.1250
Epoch 9/10
1000/1000 [==============================] - 0s 12us/sample - loss: 39.0841 - categorical_accuracy: 0.1010 - val_loss: 44.3178 - val_categorical_accuracy: 0.1200
Epoch 10/10
1000/1000 [==============================] - 0s 17us/sample - loss: 46.0538 - categorical_accuracy: 0.1000 - val_loss: 52.5043 - val_categorical_accuracy: 0.1350
<tensorflow.python.keras.callbacks.History at 0x7f9d3186fb90>

fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)

  • x:输入数据。如果模型只有一个输入,那么x的类型是numpy array,如果模型有多个输入,那么x的类型应当为list,list的元素是对应于各个输入的numpy array。如果模型的每个输入都有名字,则可以传入一个字典,将输入名与其输入数据对应起来。

  • y:标签,numpy array。如果模型有多个输出,可以传入一个numpy array的list。如果模型的输出拥有名字,则可以传入一个字典,将输出名与其标签对应起来。

  • batch_size:整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。

  • epochs:整数,训练终止时的epoch值,训练将在达到该epoch值时停止,当没有设置initial_epoch时,它就是训练的总轮数,否则训练的总轮数为epochs - inital_epoch

validation_data:形式为(X,y)或(X,y,sample_weights)的tuple,是指定的验证集。此参数将覆盖validation_spilt。

 tf.data输入数据

dataset=tf.data.Dataset.from_tensor_slices((train_x,train_y))
dataset=dataset.batch(32)
dataset=dataset.repeat()
val_dataset=tf.data.Dataset.from_tensor_slices((val_x,val_y))
val_dataset=val_dataset.batch(32)
val_dataset=val_dataset.repeat()
model.fit(dataset,epochs=100,steps_per_epoch=30,validation_data=val_dataset,validation_steps=3)

结果

s: 1026.0870 - val_categorical_accuracy: 0.0833
Epoch 85/100
30/30 [==============================] - 0s 753us/step - loss: 691.6559 - categorical_accuracy: 0.0919 - val_loss: 616.5590 - val_categorical_accuracy: 0.0729
Epoch 86/100
30/30 [==============================] - 0s 755us/step - loss: 709.1069 - categorical_accuracy: 0.0940 - val_loss: 830.7921 - val_categorical_accuracy: 0.0833
Epoch 87/100
30/30 [==============================] - 0s 801us/step - loss: 716.3923 - categorical_accuracy: 0.0865 - val_loss: 899.2913 - val_categorical_accuracy: 0.0833
Epoch 88/100
30/30 [==============================] - 0s 783us/step - loss: 746.0258 - categorical_accuracy: 0.0972 - val_loss: 670.0755 - val_categorical_accuracy: 0.1354
Epoch 89/100
30/30 [==============================] - 0s 791us/step - loss: 749.3564 - categorical_accuracy: 0.1090 - val_loss: 829.1726 - val_categorical_accuracy: 0.0833
Epoch 90/100
30/30 [==============================] - 0s 842us/step - loss: 768.9260 - categorical_accuracy: 0.1122 - val_loss: 1088.9361 - val_categorical_accuracy: 0.0521
Epoch 91/100
30/30 [==============================] - 0s 846us/step - loss: 774.0048 - categorical_accuracy: 0.0919 - val_loss: 763.9760 - val_categorical_accuracy: 0.0833
Epoch 92/100
30/30 [==============================] - 0s 809us/step - loss: 817.3847 - categorical_accuracy: 0.0983 - val_loss: 738.9408 - val_categorical_accuracy: 0.0833
Epoch 93/100
30/30 [==============================] - 0s 817us/step - loss: 834.1867 - categorical_accuracy: 0.0962 - val_loss: 701.1226 - val_categorical_accuracy: 0.0833
Epoch 94/100
30/30 [==============================] - 0s 773us/step - loss: 802.6811 - categorical_accuracy: 0.0962 - val_loss: 831.2987 - val_categorical_accuracy: 0.1042
Epoch 95/100
30/30 [==============================] - 0s 820us/step - loss: 843.7866 - categorical_accuracy: 0.1004 - val_loss: 1046.8832 - val_categorical_accuracy: 0.1562
Epoch 96/100
30/30 [==============================] - 0s 762us/step - loss: 865.3676 - categorical_accuracy: 0.0962 - val_loss: 1077.5076 - val_categorical_accuracy: 0.1562
Epoch 97/100
30/30 [==============================] - 0s 755us/step - loss: 889.7314 - categorical_accuracy: 0.0844 - val_loss: 865.8003 - val_categorical_accuracy: 0.1042
Epoch 98/100
30/30 [==============================] - 0s 865us/step - loss: 858.5444 - categorical_accuracy: 0.1068 - val_loss: 886.1849 - val_categorical_accuracy: 0.0833
Epoch 99/100
30/30 [==============================] - 0s 870us/step - loss: 926.8635 - categorical_accuracy: 0.1015 - val_loss: 1029.2370 - val_categorical_accuracy: 0.0833
Epoch 100/100
30/30 [==============================] - 0s 851us/step - loss: 926.2303 - categorical_accuracy: 0.0908 - val_loss: 792.0158 - val_categorical_accuracy: 0.1042
<tensorflow.python.keras.callbacks.History at 0x7f9d2b5df7d0>

steps_per_epoch: 一个epoch包含的步数(每一步是一个batch的数据送入),当使用如TensorFlow数据Tensor之类的输入张量进行训练时,默认的None代表自动分割,即数据集样本数/batch样本数。 

 

评估与预测

test_x=np.random.random((1000,72))
test_y=np.random.random((1000,10))
model.evaluate(test_x,test_y,batch_size=32)
test_data=tf.data.Dataset.from_tensor_slices((test_x,test_y))
test_data=test_data.batch(32).repeat()
model.evaluate(test_data,steps=30)
result=model.predict(test_x,batch_size=32)
print(result)

结果

1000/1 [===============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值