Tensorflow:tf.random_uniform() 和 tf.random_normal

一、tf.random_uniform()

默认是在 0 到 1 之间产生随机数,也可以通过 minval 和 maxval 指定上下界

tf.random_uniform((4, 4), minval=low,maxval=high,dtype=tf.float32)))

返回6*6的矩阵,产生于 low 和 high 之间,产生的值是均匀分布的。

import tensorflow as tf
import numpy as np

a = tf.random_uniform([1])

with tf.Session() as sess:
    print(sess.run(tf.random_uniform((4,4),minval=-0.5,maxval=0.5,dtype=tf.float32)))

在这里插入图片描述

二、tf.random_normal

tf.random_normal()函数用于从服从指定正太分布的数值中取出指定个数的值

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

shape: 输出张量的形状,必选
mean: 正态分布的均值,默认为0
stddev: 正态分布的标准差,默认为1.0
dtype: 输出的类型,默认为tf.float32
seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
name: 操作的名称
import tensorflow as tf
 
w = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
 
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(w)
    print(sess.run(w))

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【从零开始⼈⼯智能01】⼈⼯智能运⾏开发环境搭建 从零开始⼈⼯智能系列: 1. 2. ⼈⼯智能运⾏开发环境搭建 ⼀、系统要求 操作系统为Win10。如果有条件的话,建议还是在Linux系统下搭建⼈⼯智能环境。 ⼆、软件安装 由于使⽤Win10操作系统,环境搭建选定Anaconda软件为基础,⼈⼯智能组件选择了当前最热的两类:tensorflow和gym。 2.创建运⾏环境 运⾏Anaconda Navigator,依次点击【Enviroments】-【Create】,输⼊运⾏环境名称(这⾥我的环境名称为hdrai),选择Python版 本3.6。 3.安装spyder 根据百度百科:Spyder是Python作者为它开发的⼀个简单的集成开发环境,和其他的Python开发环境相⽐,它最⼤的优点就是模仿 MATLAB的"⼯作空间"的功能,可以很⽅便地观察和修改数组的值。 点击【Home】,选择刚才创建的运⾏环境(我创建的是hdrai),安装Spyder组件。如果已安装,显⽰按钮为【Launch】,如果未安装,显 ⽰按钮为【Install】。 4.打开运⾏环境终端,升级pip(也可以选择暂时不升级) 在Anaconda软件中选中刚才创建的运⾏环境(我创建的是hdrai),点击向右箭头,选择【Open Terminal】,打开终端。 输⼊:python -m pip install --upgrade pip 5.安装tensorflow 输⼊:pip install tensorflow 6.安装keras 输⼊:pip install keras 7.安装matplotlib 输⼊:pip install matplotlib 8.安装gym 输⼊:pip install gym 安装过程中,注意到环境中已经有⾼版本的pyglet了(1.3.2),安装的gym版本是0.10.9。后⾯在⽤代码测试环境时发现pyglet-1.3.2⽀ 持gym-0.10.9时会报错,需要将pyglet版本降到1.2.4。 降版本的命令为:pip install pyglet==1.2.4 安装完成后可以⽤pip list查看所有安装的组件及版本 三、运⾏环境测试 import gym from gym import wrappers env=gym.make('CartPole-v0') # 根据本机情况创建⼀个缓存⽬录 env=wrappers.Monitor(env,'E:/Workplace/OpenAI/tmp/cartpole-experiment-1', force='True') for i_episode in range(20): observation=env.reset() for t in range(100): env.render() print(observation) action=env.action_space.sample() s,r,done,info=env.step(action) if done: print("Episode finished after {} timestep".format(t+1)) break # 关闭动画效果窗体 exit() 运⾏效果为: import tensorflow as tf import numpy as np # 使⽤ NumPy ⽣成假数据(phony data), 总共 100 个点. x_data = np.float32(np.random.rand(2, 100)) # 随机输⼊ y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 构造⼀个线性模型# b = tf.Variable(tf.zeros([1])) W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) y = tf.matmul(W, x_data) + b # 最⼩化⽅差 loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) # 初始化变量 init = tf.initialize_all_variables() # 启动图 (graph) sess = tf.Session() sess.run(init) # 拟合平⾯ for step in range(0,201): sess.run(train) if step % 20 == 0: print(step, sess.run(W
好的,可以通过修改嵌入层的代码来实现在嵌入层使用PGD生成扰动样本。具体步骤如下: 1.首先定义一个PGD攻击函数,输入为原始数据和标签,输出为扰动后的数据。 ```python import tensorflow as tf def pgd_attack(model, x, y, eps, alpha, iters): """ PGD攻击函数 """ # 生成一个与x相同维度的随机扰动 delta = tf.random.uniform(tf.shape(x), -eps, eps) # 对扰动进行裁剪,保证其在L infinity范数内 delta = tf.clip_by_value(delta, -eps, eps) for i in range(iters): # 带扰动的数据 x_adv = x + delta # 对x_adv进行前向传播,计算损失函数 with tf.GradientTape() as tape: tape.watch(x_adv) y_pred = model(x_adv) loss = tf.keras.losses.sparse_categorical_crossentropy(y, y_pred) # 对损失函数进行反向传播,计算扰动的梯度 grad = tape.gradient(loss, x_adv) # 使用FGSM方法对扰动进行更新 delta = tf.clip_by_value(delta + alpha * tf.sign(grad), -eps, eps) delta = tf.clip_by_value(delta, -eps, eps) x_adv = x + delta return x_adv ``` 2.对嵌入层进行修改,加入PGD攻击的扰动项。 ```python class Model(tf.keras.Model): def __init__(self, num_users, num_items, num_tags, embedding_size): super(Model, self).__init__() self.num_users = num_users self.num_items = num_items self.num_tags = num_tags self.embedding_size = embedding_size # 定义嵌入层 self.embedding_U = tf.keras.layers.Embedding(num_users, embedding_size) self.embedding_I = tf.keras.layers.Embedding(num_items, embedding_size) self.embedding_Tu = tf.keras.layers.Embedding(num_tags, embedding_size) # 定义带扰动的嵌入层 self.delta_U = tf.Variable(tf.compat.v1.truncated_normal(shape=[num_users, embedding_size], mean=0.0, stddev=0.01)) self.delta_I = tf.Variable(tf.compat.v1.truncated_normal(shape=[num_items, embedding_size], mean=0.0, stddev=0.01)) self.delta_Tu = tf.Variable(tf.compat.v1.truncated_normal(shape=[num_tags, embedding_size], mean=0.0, stddev=0.01)) def call(self, inputs): # 解析输入数据 user_id, item_id, tag_id = inputs # 进行嵌入 emb_U = self.embedding_U(user_id) emb_I = self.embedding_I(item_id) emb_Tu = self.embedding_Tu(tag_id) # 加入扰动 emb_U = emb_U + self.delta_U[user_id] emb_I = emb_I + self.delta_I[item_id] emb_Tu = emb_Tu + self.delta_Tu[tag_id] # 拼接嵌入向量 emb = tf.concat([emb_U, emb_I, emb_Tu], axis=1) # 对嵌入向量进行全连接层计算 logits = self.fc(emb) return logits ``` 在上述代码中,我们加入了三个带扰动的嵌入层`self.delta_U`、`self.delta_I`、`self.delta_Tu`,并且在每次前向传播时,将扰动项加到对应的嵌入向量上。 3.对原有的训练代码进行修改,调用PGD攻击函数进行扰动。 ```python # 定义PGD攻击函数的参数 eps = 0.1 alpha = 0.01 iters = 10 # 进行PGD攻击 x_adv = pgd_attack(model, x, y, eps, alpha, iters) # 将扰动后的数据输入模型进行训练 with tf.GradientTape() as tape: y_pred = model(x_adv) loss = tf.keras.losses.sparse_categorical_crossentropy(y, y_pred) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) ``` 在上述代码中,我们首先调用PGD攻击函数`pgd_attack`,生成扰动样本`x_adv`。然后将扰动后的数据输入模型进行训练,计算损失函数并进行反向传播,最后更新模型参数。 这样就完成了在嵌入层使用PGD生成扰动样本的过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值