sicp 习题1.31,1.32,1.33解答

    此题与1.32、1.33是一个系列题,没什么难度,只不过把sum的加改成乘就可以了,递归与迭代版本相应修改即可:
;(define (product term a  next  b)
;  (
if  ( >  a b)
;      
1
;      (
*  (term a) (product term ( next  a)  next  b))))
(define (product
- iter term a  next  b result)
  (
if  ( >  a b)
      result
      (product
- iter term ( next  a)   next  b ( *  result (term a)))))
   分号注释的是递归版本。利用product过程生成一个计算pi的过程,也是很简单,通过观察公式的规律即可得出:
(define (product term a  next  b)
  (product
- iter term a  next  b  1 ))
(define (inc x) (
+  x  2 ))
(define (pi
- term n)( /  ( *  ( -  n  1 ) ( +  n  1 )) ( *  n n)))
(define (product
- pi a b)
   (product pi
- term a inc b))
测试一下:

>  ( *   4  (product - pi  3   1000 ))
3.1431638424191978569077933 dot.gif

再来看习题1.32,如果说sum和product过程是一定程度的抽象,将对累积项和下一项的处理抽象为过程作为参数提取出来,那么这个题目要求将累积的操作也作为参数提取出来,是更高层次的抽象,同样也难不倒我们:
(define (accumulate combiner null - value term a  next  b)
  (
if  ( >  a b)
      null
- value
      (combiner (term a) (accumulate combiner null
- value term ( next  a)  next  b))))

OK,其中combiner是进行累积的操作,而null-value值基本值。现在改写sum和product过程,对于sum过程来说,累积的操作就是加法,而基本值当然是0了:
(define (sum term a  next  b)
  (accumulate 
+   0  term a  next  b))

而对于product,累积操作是乘法,而基本值是1,因此:
(define (product term a  next  b)
  (accumulate 
*   1  term a  next  b))

测试一下过去写的那些测试程序,比如生成pi的过程,可以验证一切正常!

上面的accumulate过程是递归版本,对应的迭代版本也很容易改写了:
(define (accumulate - iter combiner term a  next  b result)
  (
if  ( >  a b)
      result
      (accumulate
- iter combiner term ( next  a)  next  b (combiner result (term a)))))
(define (accumulate  combiner null
- value term a  next  b)
  (accumulate
- iter combiner term a  next  b null - value))

再看习题1.33,在accumulate的基础上多增加一个filter的参数(也是一个过程,用于判断项是否符合要求),在accumulate的基础上稍微修改下,在每次累积之前进行判断即可:

(define (filtered - accumulate combiner null - value term a  next  b filter)
  (cond ((
>  a b) null - value)
        ((filter a) (combiner (term a) (filtered
- accumulate combiner null - value term ( next  a)  next  b filter))) 
        (
else  (filtered - accumulate combiner null - value term ( next  a)  next  b filter))))

比如,求a到b中的所有素数之和的过程可以写为(利用以前写的prime?过程来判断素数):
(define (sum - primes a b)
  (filtered
- accumulate  +   0  identity a inc b prime ? ))

测试一下:
>  (sum - primes  2   4 )
5
>  (sum - primes  2   7 )
17
>  (sum - primes  2   11 )
28
>  (sum - primes  2   100 )
1060

117347.html

dennis 2007-05-14 15:10 发表评论
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值