###生成器补充:
1.生成器函数之生成一组数据
defGenerateData(batchsize=100):train_x=np.linspace(-1,1,batchsize)###等差数列(一维数组)train_y=2*train_x+np.random.randn(*train_x.shape)*0.3###加入噪声的y=zx(一维数组)##np.random.randn(形状)生成0-1间,包括0但不包括1的随机数yieldtrain_x,train_y##以生成器方式返回训练数据x,y
2.生成器函数之生成多组数据
defGenerateData(training_epochs,batchsize=100):foriinrange(training_epochs):train_x=np.linspace(-1,1,batchsize)###等差数列(一维数组)train_y=2*train_x+np.random.randn(*train_x.shape)*0.3###加入噪声的y=zx(一维数组)##np.random.randn(形状)生成0-1间,包括0但不包括1的随机数yieldtrain_x,train_y,i##生成training_epochs组数据,每去一次,生成一个,直到生成training_epochs组
###生成器模拟数据
def GenerateData(batchsize = 100): train_x = np.linspace(-1,1,batchsize) ###等差数列(一维数组) train_y = 2*train_x+np.random.randn(*train_x.shape)*0.3 ###加入噪声的y=zx (一维数组) ##np.random.randn(形状)生成0-1间,包括0但不包括1的随机数 yield train_x,train_y ##以生成器方式返回 训练数据 x,y ##定义占位符 Xinput = tf.placeholder("float32",(None)) Yinput = tf.placeholder("float32",(None)) ##建立会话,获取并输出数据(没有通过计算,直接显示输入数据) training_epochs = 20 ##定义迭代次数 with tf.Session() as sess: ##建立会话session for epoch in range(training_epochs): ##迭代数据20遍【需要调用training_epochs次生成器函数】 for x,y in GenerateData(): ##通过for循环打印所有节点 xv,yv = sess.run([Xinput,Yinput],feed_dict = {Xinput:x,Yinput:y}) ###通过静态图注入的方式输入数据 print(epoch,"| x.shape:",np.shape(xv),"| x[:3]:",xv[:3]) ###取数据的前3个数据进行打印 print(epoch, "| y.shape:", np.shape(yv), "| y[:3]:", yv[:3]) ###取数据的前3个进行打印 train_data = list(GenerateData())[0] plt.plot(train_data[0],train_data[1],'ro',label='original_data') plt.legend() #添加说明 plt.show() ''' 理解:生成器函数生成一组随机等差数列和对应加有噪声的y,在会话中迭代20次,同时调用20次生成器函数 '''
###知识补充
a = [1,2,3,4,] b = ['a','b','c','d'] print(shuffle(a)) print(shuffle(b)) print(shuffle(a,b)) ''' [2, 4, 3, 1] ['d', 'a', 'c', 'b'] [[3, 2, 1, 4], ['c', 'b', 'a', 'd']] 注意:两个乱序的规则是一致的 '''