2019/6/9CS231n课程笔记(深度学习框架)

1、设置

#设置用CPU还是GPU进行
with tf.device('/gpu:0'):
    balabalabala

2、一种只有我才能看懂的笔记……

#define计算框架
N,D,H=64,1000,100
x=tf.placeholder(tf.float32,shape=(N,D))
y=tf.placeholder(tf.float32,shape=(N,D))
w1=tf.placeholder(tf.float32,shape=(D,H))
w2=tf.placeholder(tf.float32,shape=(H,D))

#前向传播计算loss值、预测y值
h=tf.maximum(tf.matmul(x,w1),0)
y_pred=tf.matmul(h,w2)
diff=y_pred-y
#计算loss在w1,w2上的梯度
loss=tf.reduce_mean(tf.reduce_sum(diff**2,axis=1))#???这是一行的diff进行相加吗?我觉得应该把列的内容加在一块啊。

grad_w1,grad_w2=tf.gradients(loss,[w1,w2])

--------------------------------------------------------
#运行这一框架若干次
with tf.Session() as sess:
    values={x:np.random.randn(N,D),
            w1:np.random.randn(D,H),
            w2:np.random.randn(H,D),
            y:np.random.randn(N,D),}
    out=sess.run([loss,grad_w1,grad_w2],    #实际开始运行框架
                 feed_dict=vlaues)
    loss_val,grad_w1_val,grad_w2_val=out
---------------------------------------------------------
#运行这一框架若干次
with tf.Session() as sess:
    values={x:np.random.randn(N,D),
            w1:np.random.randn(D,H),
            w2:np.random.randn(H,D),
            y:np.random.randn(N,D),}
    learning_rate=1e-5                      #设置学习率更新权重
    for t in range(50):
        out=sess.run([loss,grad_w1,grad_w2],
                     feed_dict=vlaues)
        loss_val,grad_w1_val,grad_w2_val=out
        values[w1]-=learning_rate*grad_w1_val
        values[w2]-=learning_rate*grad_w2_val
---------------------------------------------------------

N,D,H=64,1000,100
x=tf.placeholder(tf.float32,shape=(N,D))
y=tf.placeholder(tf.float32,shape=(N,D))
w1=tf.Varible(tf.random_normal((D,H)))
w2=tf.Varible(tf.random_normal((H,D)))       #初始化w

h=tf.maximum(tf.matmul(x,w1),0)
y_pred=tf.matmul(h,w2)
diff=y_pred-y
#计算loss在w1,w2上的梯度
loss=tf.reduce_mean(tf.reduce_sum(diff**2,axis=1))
grad_w1,grad_w2=tf.gradients(loss,[w1,w2])

#添加w1、w2的更新部分
learning_rate=1e-5 
new_w1=w1.assign(w1-learning_rate*grad_w1)
new_w2=w2.assign(w2-learning_rate*grad_w2)
-------------------------------------------------------

with tf.Session() as sess:
    sess.run(tf.global_variable_initializer())#给w1,w2赋值
    values={x:np.random_normal((N,D),
            y:np.random_normal((N,D),}
    for t in range(50):
        loss_val,=sess.run([loss],feed_dict=values)
-------------------------------------------------------
updates=tf.group(new_w1,new_w2)

with tf.Session() as sess:
    sess.run(tf.global_variable_initializer())#给w1,w2赋值
    values={x:np.random_normal((N,D),
            y:np.random_normal((N,D),}
    losses=[]
    for t in range(50):
        loss_val,=sess.run([loss,updates],
                           feed_dict=values)
-------------------------------------------------------

N,D,H=64,1000,100
x=tf.placeholder(tf.float32,shape=(N,D))
y=tf.placeholder(tf.float32,shape=(N,D))
---------------------------------
w1=tf.Varible(tf.random_normal((D,H)))
w2=tf.Varible(tf.random_normal((H,D)))       #初始化w

h=tf.maximum(tf.matmul(x,w1),0)  
y_pred=tf.matmul(h,w2)            
---------------------------------
loss=tf.losses.mean_squared_error(y_pred,y)

optimizer=tf.train.GradientDescentOptimizer(
updates=optimizer.minimize(loss)

with tf.Session() as sess:
    sess.run(tf.global_variable_initializer())#给w1,w2赋值
    values={x:np.random_normal((N,D),
            y:np.random_normal((N,D),}
    losses=[]
    for t in range(50):
        loss_val,=sess.run([loss,updates],
                           feed_dict=values)
------------------------------------------------------
#用这种方式初始化w和bias
init=tf.contrib.layers.xavier_initializer()
h=tf.layers.dense(inputs=x,units=H,activation=tf.nn.relu,kernel_initializer=init)
y_pred=tf.layer.dense(inputs=h,units=D,kernel_initializer=init)
------------------------------------------------------

3、Keras

4、feed_dict与占位符

学习资料:https://blog.youkuaiyun.com/m0_37324740/article/details/77803694

5、tf.group()操作

学习资料:https://blog.youkuaiyun.com/LoseInVain/article/details/81703786

<think>好的,我现在需要解决用户在Mplus中遇到的“重复变量错误”和“语句未以分号终止”的问题。首先,我得回忆一下Mplus的基本语法规则。用户提到的这两个错误比较常见,特别是对于刚接触Mplus的用户来说。 首先,“重复变量错误”通常是因为在定义变量时,同一个变量名被多次声明了。比如在VARIABLE命令中,如果多次列出同一个变量,或者在DATA部分重复定义变量名,就会触发这个错误。这时候需要检查所有涉及变量定义的部分,确保每个变量名只出现一次。另外,用户可能在USEVARIABLES列表中不小心重复了变量,或者在模型部分(比如MODEL)重复使用了某个变量名,这也可能导致错误。 然后是“语句未以分号终止”的问题。Mplus的语法要求每个命令语句必须以分号结束。如果用户忘记在某个命令的末尾加上分号,或者在分号前有拼写错误,比如用了中文分号,就会报这个错误。这时候需要仔细检查每个命令的结尾,确保分号正确且是英文符号。 接下来,我需要结合用户提供的引用内容。虽然用户给出的引用主要是关于变量声明和避免重复记录的示例,但可能与Mplus的错误没有直接关联。例如,引用[1]提到编译器可能禁止声明未使用的变量,这在Mplus中可能对应定义但未在模型中使用的变量,但Mplus通常不会因此报错,只是可能警告。不过用户的问题是关于重复变量和分号的,所以可能需要更关注语法结构。 为了验证这些思路,我可以设想一个例子。比如用户在VARIABLE部分这样写: VARIABLE: NAMES ARE var1 var2 var1; USEVARIABLES = var1 var2 var1; 这里,NAMES ARE行中var1出现了两次,导致重复变量错误。同时,如果用户漏掉了分号,比如: MODEL: var1 ON var2 这里缺少分号,就会触发语句未终止的错误。此外,分号如果是中文的“;”而不是英文的“;”,也会导致同样的问题。 解决方法方面,对于重复变量,需要检查所有定义变量的地方,确保每个变量名唯一。对于分号问题,要检查每个命令块是否以英文分号结束。此外,建议用户使用Mplus的语法检查工具,或者逐步运行代码,分部分调试,以快速定位错误位置。 可能还需要提醒用户注意其他常见错误,比如变量名拼写错误、大小写不一致(Mplus变量名是否区分大小写?),或者命令拼写错误(比如VARIABLES误写成VARIABLE)。此外,数据文件中的变量名是否与代码中的一致,也是需要检查的点。 总结来说,解决这两个错误的关键是仔细检查语法,确保变量名的唯一性和正确使用分号。通过逐步排查和验证,用户应该能够解决这些问题。</think>关于您在Mplus中遇到的**重复变量错误**和**语句未以分号终止**问题,以下是分步解决方案: --- ### 一、重复变量错误(Duplicate Variable Error) #### 原因分析 1. **变量名重复定义**:在`VARIABLE`或`MODEL`等命令块中多次声明同一变量名。 2. **数据文件与代码冲突**:数据文件(如`.dat`)的变量名与代码中定义的变量名重复。 3. **拼写错误**:变量名因拼写或大小写不一致导致隐性重复。 #### 解决方法 1. **检查`VARIABLE`命令块**: ```mplus VARIABLE: NAMES = var1 var2 var3; ! 确保变量名唯一 USEVARIABLES = var1 var2; ! 避免重复列出变量 ``` 2. **验证数据文件**:确保数据文件中的变量名与代码中声明的一致,无重复列。 3. **检查模型语法**:在`MODEL`部分避免重复使用变量名,例如: ```mplus MODEL: var1 ON var2; ! 正确 var1 ON var3; ! 正确 var1 ON var2; ! 重复会导致错误 ``` --- ### 二、语句未以分号终止(Statement Not Terminated by Semicolon) #### 原因分析 1. **缺少分号**:命令结尾未添加英文分号`;`。 2. **分号位置错误**:分号被错误地放置在注释符号(`!`或`#`)之后。 3. **中文符号干扰**:误用中文分号`;`代替英文分号`;`。 #### 解决方法 1. **检查所有命令结尾**: ```mplus MODEL: var1 ON var2; ! 正确:分号在语句末尾 var3 ON var4 ! 错误:缺少分号 ``` 2. **处理注释与分号顺序**: ```mplus var1 ON var2; ! 正确:注释在分号后 var1 ON var2 ! 错误:注释在分号前; ``` 3. **验证符号语言**:在代码编辑器中启用英文标点输入模式。 --- ### 三、验证与调试建议 1. **分步运行代码**:逐段注释代码,定位具体报错位置。 2. **使用Mplus语法检查工具**:如Mplus Editor的语法高亮和自动纠错功能。 3. **参考官方文档**:查阅[Mplus User&#39;s Guide](https://www.statmodel.com/ugexcerpts.shtml)中关于变量定义和语法规则的章节[^1]。 --- ### 示例修正 **错误代码**: ```mplus VARIABLE: NAMES = age gender age; ! 重复变量"age" USEVARIABLES = age gender; MODEL: math ON age gender ! 缺少分号 ``` **修正后代码**: ```mplus VARIABLE: NAMES = age gender score; ! 变量名唯一 USEVARIABLES = age gender; MODEL: math ON age gender; ! 分号结尾 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值