2018年2月

见见 Manjaro Gaming, 一个专门为游戏者设计的 Linux 发行版,带有 Manjaro 的所有才能。

在 Linux 上玩转游戏? 没错,这是非常可行的,我们正致力于为游戏人群打造一个新的 Linux 发行版。

Manjaro Gaming 是一个专门为游戏人群设计的,带有 Manjaro 所有才能的发行版。之前用过 Manjaro Linux 的人一定知道为什么这对于游戏人群来说是一个如此好的一个消息。

Manjaro 是一个 Linux 发行版,它基于最流行的 Linux 发行版之一 —— Arch Linux。 Arch Linux 因它的前沿性所带来的轻量、强大、高度定制和最新的体验而闻名于世。尽管这些都非常赞,但是也正是因为 Arch Linux 提倡这种 DIY (do it yourself)方式,导致一个主要的缺点,那就是用户想用好它,需要处理一定的技术问题。

Manjaro 把这些要求全都剥离开去,让 Arch 对新手更亲切,同时也为老手提供了 Arch 所有的高端与强大功能。总之,Manjaro 是一个用户友好型的 Linux 发行版,工作起来行云流水。

Manjaro 会成为一个强大并且极度适用于游戏的原因:

  • Manjaro 自动检测计算的硬件(例如,显卡)
  • 自动安装必要的驱动和软件(例如,显示驱动)
  • 预安装播放媒体文件的编码器
  • 专用的软件库提供完整测试过的稳定软件包。

Manjaro Gaming 打包了 Manjaro 的所有强大特性以及各种小工具和软件包,以使得在 Linux 上做游戏即顺畅又享受。

Manjaro Gaming 内部

优化

Manjaro Gaming 做了一些优化:

  • Manjaro Gaming 使用高度定制化的 XFCE 桌面环境,拥有一个黑暗风格主题。
  • 禁用睡眠模式,防止用手柄上玩游戏或者观看一个长过场动画时计算机自动休眠。

软件

维持 Manjaro 工作起来行云流水的传统,Manjaro Gaming 打包了各种开源软件包,提供游戏人群经常需要用到的功能。其中一部分软件有:

  • KdenLIVE:用于编辑游戏视频的视频编辑软件
  • Mumble:给游戏人群使用的视频聊天软件
  • OBS Studio:用于录制视频或在 Twitch 上直播游戏用的软件
  • OpenShot:Linux 上强大的视频编辑器
  • PlayOnLinux:使用 Wine 作为后端,在 Linux 上运行 Windows 游戏的软件
  • Shutter:多种功能的截图工具

模拟器

Manjaro Gaming 自带很多的游戏模拟器:

  • DeSmuME:Nintendo DS 任天堂 DS 模拟器
  • Dolphin Emulator:GameCube 和 Wii 模拟器
  • DOSBox:DOS 游戏模拟器
  • FCEUX:任天堂娱乐系统(NES)、 红白机(FC)和 FC 磁盘系统(FDS)模拟器
  • Gens/GS:世嘉模拟器
  • PCSXR:PlayStation 模拟器
  • PCSX2:Playstation 2 模拟器
  • PPSSPP:PSP 模拟器
  • Stella:Atari 2600 VCS (雅达利)模拟器
  • VBA-M:Gameboy 和 GameboyAdvance 模拟器
  • Yabause:世嘉土星模拟器
  • ZSNES:超级任天堂模拟器

其它

还有一些终端插件 —— Color、ILoveCandy 和 Screenfetch。也包括带有 Retro Conky(LCTT 译注:复古 Conky)风格的 Conky 管理器

注意:上面提到的所有功能并没有全部包含在 Manjaro Gaming 的现行发行版中(版本 16.03)。部分功能计划将在下一版本中纳入 —— Manjaro Gaming 16.06(LCTT 译注:本文发表于 2016 年 5 月)。

下载

Manjaro Gaming 16.06 将会是 Manjaro Gaming 的第一个正式版本。如果你现在就有兴趣尝试,你可以在 Sourceforge 的项目页面中下载。去那里然后下载它的 ISO 文件吧。

你觉得 Gaming Linux 发行版怎么样?想尝试吗?告诉我们!


via: https://itsfoss.com/manjaro-gaming-linux/

作者:Munif Tanjim 译者:XLCYun 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

谨以此文纪念 “ 开源软件 open source software ” 这个名词的二十周年纪念日,开源软件是怎么占有软件的主导地位的?以后会如何发展?

 title=

二十年以前,在 1998 年 2 月,“ 开源 open source ” 这个词汇第一次出现在“软件”这一名词之前。不久之后, 开源的定义 Open Source Definition (OSD) 这一文档被创建,并成为了撒播 开放源代码促进会 Open Source Initiative (OSI)的种子。正如 OSD 的作者 Bruce Perens 所说

“开源”是这场宣传自由软件的既有概念到商业软件,并将许可证化为一系列规则的运动的正式名称。

二十年后,我们能看到这一运动是非常成功的,甚至超出了当时参与这一活动的任何人的想象。 如今,开源软件无处不在。它是互联网和网络的基础。它为我们所有使用的电脑和移动设备,以及它们所连接的网络提供动力。没有它,云计算和新兴的物联网将不可能发展,甚至不可能出现。它使新的业务方式可以被测试和验证,还可以让像谷歌和 Facebook 这样的大公司在已有的基础之上继续攀登。

如任何人类的造物一样,它也有黑暗的一面。它也让反乌托邦的监视和必然导致的专制控制的出现成为了可能。它为犯罪分子提供了欺骗受害者的新的途径,还让匿名且大规模的欺凌得以存在。它让有破环性的狂热分子可以暗中组织而不会感到有何不便。这些都是开源的能力之下的黑暗投影。所有的人类工具都是如此,既可以养育人类,亦可以有害于人类。我们需要帮助下一代,让他们能争取无可取代的创新。就如 费曼所说

每个人都掌握着一把开启天堂之门的钥匙,但这把钥匙亦能打开地狱之门。

开源运动已经渐渐成熟。我们讨论和理解它的方式也渐渐的成熟。如果说第一个十年是拥护与非议对立的十年,那么第二个十年就是接纳和适应并存的十年。

  1. 在第一个十年里面,关键问题就是商业模型 —— “我怎样才能自由的贡献代码,且从中受益?” —— 之后,还有更多的人提出了有关管理的难题—— “我怎么才能参与进来,且不受控制 ?”
  2. 第一个十年的开源项目主要是替代现有的产品;而在第二个十年中,它们更多地是作为更大的解决方案的组成部分。
  3. 第一个十年的项目往往由非正式的个人组织进行;而在第二个十年中,它们经常由创建于各个项目上的机构经营。
  4. 第一个十年的开源开发者经常是投入于单一的项目,并经常在业余时间工作。 在第二个十年里,他们越来越多地受雇从事于一个专门的技术 —— 他们成了专业人员。
  5. 尽管开源一直被认为是提升软件自由度的一种方式,但在第一个十年中,这个运动与那些更喜欢使用“ 自由软件 free software ”的人产生了冲突。在第二个十年里,随着开源运动的加速发展,这个冲突基本上被忽略了。

第三个十年会带来什么?

  1. 更复杂的商业模式 —— 主要的商业模式涉及到将很多开源组件整合而产生的复杂性的解决方案,特别是部署和扩展方面。 开源治理的需求将反映这一点。
  2. 开源拼图 —— 开源项目将主要是一系列组件,彼此衔接构成组件堆栈。由此产生的解决方案将是开源组件的拼图。
  3. 项目族 —— 越来越多的项目将由诸如 Linux Foundation 和 OpenStack 等联盟/行业协会以及 Apache 和 Software Freedom Conservancy 等机构主办。
  4. 专业通才 —— 开源开发人员将越来越多地被雇来将诸多技术集成到复杂的解决方案里,这将有助于一系列的项目的开发。
  5. 软件自由度降低 —— 随着新问题的出现,软件自由(将四项自由应用于用户和开发人员之间的灵活性)将越来越多地应用于识别解决方案是否适用于协作社区和独立部署人员。

2018 年,我将在全球各地的主题演讲中阐述这些内容。欢迎观看 OSI 20 周年纪念全球巡演

本文最初发表于 Meshed Insights Ltd. , 已获转载授权,本文,以及我在 OSI 的工作,由 Patreon patrons 支持

关于作者

Simon Phipps - 计算机工业和开源软件专家 Simon Phipps 创办了公共软件公司,这是一个欧洲开源项目的托管公司,以志愿者身份成为 OSI 的总裁,还是 The Document Foundation 的一名总监。 他的作品是由 Patreon patrons 赞助 —— 如果你想看更多的话,来做赞助人吧! 在超过 30 年的职业生涯中,他一直在参与世界领先的战略层面的开发 ... 关于 Simon Phipps


via: https://opensource.com/article/18/2/open-source-20-years-and-counting

作者:Simon Phipps 译者:name1e5s 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

系统管理员需要监控 IT 基础设施来确保一切正常运行。我们需要监控硬件,也就是内存、硬盘和 CPU 等的性能,我们也必须监控我们的网络。我们需要确保我们的网络不被过度使用,否则我们的程序,网站可能无法正常工作。在本教程中,我们将学习使用 iftop

推荐阅读使用 Nagios 进行资源监控用于检查系统信息的工具要监控的重要日志

iftop 是网络监控工具,它提供实时带宽监控。 iftop 测量进出各个套接字连接的总数据量,即它捕获通过网络适配器收到或发出的数据包,然后将这些数据相加以得到使用的带宽。

在 Debian/Ubuntu 上安装

iftop 存在于 Debian/Ubuntu 的默认仓库中,可以使用下面的命令安装:

$ sudo apt-get install iftop

使用 yum 在 RHEL/Centos 上安装

要在 CentOS 或 RHEL 上安装 iftop,我们需要启用 EPEL 仓库。要启用仓库,请在终端上运行以下命令:

RHEL/CentOS 7:

$ rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm

RHEL/CentOS 6(64 位):

$ rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

RHEL/CentOS 6 (32 位):

$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

EPEL 仓库安装完成后,我们可以用下面的命令安装 iftop

$ yum install iftop

这将在你的系统上安装 iftop。我们现在将用它来监控我们的网络。

使用 iftop

可以打开终端窗口,并输入下面的命令使用 iftop

$ iftop

network monitoring

现在你将看到计算机上发生的网络活动。你也可以使用:

$ iftop -n

这将在屏幕上显示网络信息,但使用 -n,则不会显示与 IP 地址相关的名称,只会显示 IP 地址。这个选项能节省一些将 IP 地址解析为名称的带宽。

我们也可以看到 iftop 可以使用的所有命令。运行 iftop 后,按下键盘上的 h 查看 iftop 可以使用的所有命令。

network monitoring

要监控特定的网络接口,我们可以在 iftop 后加上接口名:

$ iftop -I enp0s3

如上所述,你可以使用帮助来查看 iftop 可以使用的更多选项。但是这些提到的例子只是可能只是监控网络。


via: http://linuxtechlab.com/monitoring-network-bandwidth-iftop-command/

作者:SHUSAIN 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在本教程中,我们将讨论如何在 Arch Linux 中设置日语环境。在其他类 Unix 操作系统中,设置日文布局并不是什么大不了的事情。你可以从设置中轻松选择日文键盘布局。然而,在 Arch Linux 下有点困难,ArchWiki 中没有合适的文档。如果你正在使用 Arch Linux 和/或其衍生产品如 Antergos、Manajaro Linux,请遵循本指南以在 Arch Linux 及其衍生系统中使用日语。

在 Arch Linux 中设置日语环境

首先,为了正确查看日语字符,先安装必要的日语字体:

sudo pacman -S adobe-source-han-sans-jp-fonts otf-ipafont
pacaur -S ttf-monapo

如果你尚未安装 pacaur,请参阅此链接

确保你在 /etc/locale.gen 中注释掉了(添加 # 注释)下面的行。

#ja_JP.UTF-8

然后,安装 iBus 和 ibus-anthy。对于那些想知道原因的,iBus 是类 Unix 系统的输入法(IM)框架,而 ibus-anthy 是 iBus 的日语输入法。

sudo pacman -S ibus ibus-anthy

~/.xprofile 中添加以下几行(如果不存在,创建一个):

# Settings for Japanese input
export GTK_IM_MODULE='ibus'
export QT_IM_MODULE='ibus'
export XMODIFIERS=@im='ibus'

#Toolbar for anthy
ibus-daemon -drx

~/.xprofile 允许我们在 X 用户会话开始时且在窗口管理器启动之前执行命令。

保存并关闭文件。重启 Arch Linux 系统以使更改生效。

登录到系统后,右键单击任务栏中的 iBus 图标,然后选择 “Preferences”。如果不存在,请从终端运行以下命令来启动 iBus 并打开偏好设置窗口。

ibus-setup

选择 “Yes” 来启动 iBus。你会看到一个像下面的页面。点击 Ok 关闭它。

现在,你将看到 iBus 偏好设置窗口。进入 “Input Method” 选项卡,然后单击 “Add” 按钮。

在列表中选择 “Japanese”:

然后,选择 “Anthy” 并点击添加:

就是这样了。你现在将在输入法栏看到 “Japanese - Anthy”:

根据你的需求在偏好设置中更改日语输入法的选项(点击 “Japanese-Anthy” -> “Preferences”)。

你还可以在键盘绑定中编辑默认的快捷键。完成所有更改后,点击应用并确定。就是这样。从任务栏中的 iBus 图标中选择日语,或者按下 SUPER + 空格键”(LCTT 译注:SUPER 键通常为CommandWindow` 键)来在日语和英语(或者系统中的其他默认语言)之间切换。你可以从 iBus 首选项窗口更改键盘快捷键。

现在你知道如何在 Arch Linux 及其衍生版中使用日语了。如果你发现我们的指南很有用,那么请您在社交、专业网络上分享,并支持我们。


via: https://www.ostechnix.com/setup-japanese-language-environment-arch-linux/

作者:SK 译者:geekpi 校对:Locez

本文由 LCTT 原创编译,Linux中国 荣誉推出

Learn xfs commands with examples

在我们另一篇文章中,我带您领略了一下什么是 xfs,xfs 的相关特性等内容。本文我们来看一些常用的 xfs 管理命令。我们将会通过几个例子来讲解如何创建 xfs 文件系统,如何对 xfs 文件系统进行扩容,如何检测并修复 xfs 文件系统。

创建 XFS 文件系统

mkfs.xfs 命令用来创建 xfs 文件系统。无需任何特别的参数,其输出如下:

root@kerneltalks # mkfs.xfs /dev/xvdf
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
注意:一旦 XFS 文件系统创建完毕就不能在缩容而只能进行扩容了。

调整 XFS 文件系统容量

你只能对 XFS 进行扩容而不能缩容。我们使用 xfs_growfs 来进行扩容。你需要使用 -D 参数指定挂载点的新容量。-D 接受一个数字的参数,指定文件系统块的数量。若你没有提供 -D 参数,则 xfs_growfs 会将文件系统扩到最大。

root@kerneltalks # xfs_growfs /dev/xvdf -D 256
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=720896 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2883584, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data size 256 too small, old size is 2883584

观察上面的输出中的最后一行。由于我分配的容量要小于现在的容量。它告诉你不能缩减 XFS 文件系统。你只能对它进行扩展。

root@kerneltalks #  xfs_growfs /dev/xvdf -D 2883840
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=720896 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2883584, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2883584 to 2883840

现在我多分配了 1GB 的空间,而且也成功地扩增了容量。

1GB 块的计算方式:

当前文件系统 bsize 为 4096,意思是块的大小为 4MB。我们需要 1GB,也就是 256 个块。因此在当前块数,2883584 上加上 256 得到 2883840。因此我为 -D 传递参数 2883840。

修复 XFS 文件系统

可以使用 xfs_repair 命令进行文件系统一致性检查和修复。使用 -n 参数则并不对文件系统做出什么实质性的修改。它只会搜索并报告要做哪些修改。若不带 -n 参数,则会修改文件系统以保证文件系统的纯净。

请注意,在检查之前,你需要先卸载 XFS 文件系统。否则会报错。

root@kerneltalks # xfs_repair -n /dev/xvdf
xfs_repair: /dev/xvdf contains a mounted filesystem
xfs_repair: /dev/xvdf contains a mounted and writable filesystem

fatal error -- couldn't initialize XFS library

卸载后运行检查命令。

root@kerneltalks # xfs_repair -n /dev/xvdf
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan (but don't clear) agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.

你可以看到,命令在每个阶段都显示出了为了文件系统变得健康可能做出的修改。若你希望命令在扫描时实际应用这些修改,则不带任何参数运行命令即可。

root @ kerneltalks # xfs_repair /dev/xvdf

Phase 1 - find and verify superblock . . .
Phase 2 - using internal log
        - zero log . . .
        - scan filesystem freespace and inode maps . . .
        - found root inode chunk
Phase 3 - for each AG . . . 
        - scan and clear agi unlinked lists . . .
        - process known inodes and perform inode discovery . . .
        - agno = 0 
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - process newly discovered inodes . . . 
Phase 4 - check for duplicate blocks . . .
        - setting up duplicate extent list . . .
        - check for inodes claiming duplicate blocks . . .
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4 
Phase 5 - rebuild AG headers and trees . . .
        - reset superblock . . .
Phase 6 - check inode connectivity . . .
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem . . .
        - traversal finished . . .
        - moving disconnected inodes to lost + found . . .
Phase 7 - verify and correct link counts . . . 
done

你会发现 xfs_repair 命令对文件系统做出了修改让其变得健康。

查看 XFS 版本以及它的详细信息

查看 xfs 文件系统版本很简单。使用 -V 参数运行 xfs_info 再加上挂载点就行了。

root@kerneltalks # xfs_info -V /shrikant
xfs_info version 4.5.0

若要查看 XFS 文件系统的详细信息,比如想计算扩容 XFS 文件系统时要新增多少个块,需要了解块大小,块的个数等信息,则不带任何选项运行 xfs_info 加上挂载点。

root@kerneltalks # xfs_info /shrikant
meta-data=/dev/xvdf              isize=512    agcount=5, agsize=720896 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2883840, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

则会显示 XFS 文件系统的所有详细信息,就跟创建 XFS 文件系统时显示的信息一样。

此外还有一些 XFS 文件系统管理命令可以修改并管理 XFS 的元数据。我们将在另一篇文章中来讲解。


via: https://kerneltalks.com/commands/xfs-file-system-commands-with-examples/

作者:kerneltalks 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在本文中,我们将看一些 TensorFlow 的例子,并从中感受到在定义 张量 tensor 和使用张量做数学计算方面有多么容易,我还会举些别的机器学习相关的例子。

TensorFlow 是什么?

TensorFlow 是 Google 为了解决复杂的数学计算耗时过久的问题而开发的一个库。

事实上,TensorFlow 能干许多事。比如:

  • 求解复杂数学表达式
  • 机器学习技术。你往其中输入一组数据样本用以训练,接着给出另一组数据样本基于训练的数据而预测结果。这就是人工智能了!
  • 支持 GPU 。你可以使用 GPU(图像处理单元)替代 CPU 以更快的运算。TensorFlow 有两个版本: CPU 版本和 GPU 版本。

开始写例子前,需要了解一些基本知识。

什么是张量?

张量 tensor 是 TensorFlow 使用的主要的数据块,它类似于变量,TensorFlow 使用它来处理数据。张量拥有维度和类型的属性。

维度指张量的行和列数,读到后面你就知道了,我们可以定义一维张量、二维张量和三维张量。

类型指张量元素的数据类型。

定义一维张量

可以这样来定义一个张量:创建一个 NumPy 数组(LCTT 译注:NumPy 系统是 Python 的一种开源数字扩展,包含一个强大的 N 维数组对象 Array,用来存储和处理大型矩阵 )或者一个 Python 列表 ,然后使用 tf_convert_to_tensor 函数将其转化成张量。

可以像下面这样,使用 NumPy 创建一个数组:

import numpy as np arr = np.array([1, 5.5, 3, 15, 20])
arr = np.array([1, 5.5, 3, 15, 20])

运行结果显示了这个数组的维度和形状。

import numpy as np
arr = np.array([1, 5.5, 3, 15, 20])
print(arr)
print(arr.ndim)
print(arr.shape)
print(arr.dtype)

它和 Python 列表很像,但是在这里,元素之间没有逗号。

现在使用 tf_convert_to_tensor 函数把这个数组转化为张量。

import numpy as np
import tensorflow as tf
arr = np.array([1, 5.5, 3, 15, 20])
tensor = tf.convert_to_tensor(arr,tf.float64)
print(tensor)

这次的运行结果显示了张量具体的含义,但是不会展示出张量元素。

要想看到张量元素,需要像下面这样,运行一个会话:

import numpy as np
import tensorflow as tf
arr = np.array([1, 5.5, 3, 15, 20])
tensor = tf.convert_to_tensor(arr,tf.float64)
sess = tf.Session()
print(sess.run(tensor))
print(sess.run(tensor[1]))

定义二维张量

定义二维张量,其方法和定义一维张量是一样的,但要这样来定义数组:

arr = np.array([(1, 5.5, 3, 15, 20),(10, 20, 30, 40, 50), (60, 70, 80, 90, 100)])

接着转化为张量:

import numpy as np
import tensorflow as tf
arr = np.array([(1, 5.5, 3, 15, 20),(10, 20, 30, 40, 50), (60, 70, 80, 90, 100)])
tensor = tf.convert_to_tensor(arr)
sess = tf.Session()
print(sess.run(tensor))

现在你应该知道怎么定义张量了,那么,怎么在张量之间跑数学运算呢?

在张量上进行数学运算

假设我们有以下两个数组:

arr1 = np.array([(1,2,3),(4,5,6)])
arr2 = np.array([(7,8,9),(10,11,12)])

利用 TenserFlow ,你能做许多数学运算。现在我们需要对这两个数组求和。

使用加法函数来求和:

import numpy as np
import tensorflow as tf
arr1 = np.array([(1,2,3),(4,5,6)])
arr2 = np.array([(7,8,9),(10,11,12)])
arr3 = tf.add(arr1,arr2)
sess = tf.Session()
tensor = sess.run(arr3)
print(tensor)

也可以把数组相乘:

import numpy as np
import tensorflow as tf
arr1 = np.array([(1,2,3),(4,5,6)])
arr2 = np.array([(7,8,9),(10,11,12)])
arr3 = tf.multiply(arr1,arr2)
sess = tf.Session()
tensor = sess.run(arr3)
print(tensor)

现在你知道了吧。

三维张量

我们已经知道了怎么使用一维张量和二维张量,现在,来看一下三维张量吧,不过这次我们不用数字了,而是用一张 RGB 图片。在这张图片上,每一块像素都由 x、y、z 组合表示。

这些组合形成了图片的宽度、高度以及颜色深度。

首先使用 matplotlib 库导入一张图片。如果你的系统中没有 matplotlib ,可以 使用 pip来安装它。

将图片放在 Python 文件的同一目录下,接着使用 matplotlib 导入图片:

import matplotlib.image as img
myfile = "likegeeks.png"
myimage = img.imread(myfile)
print(myimage.ndim)
print(myimage.shape)

从运行结果中,你应该能看到,这张三维图片的宽为 150 、高为 150 、颜色深度为 3 。

你还可以查看这张图片:

import matplotlib.image as img
import matplotlib.pyplot as plot
myfile = "likegeeks.png"
myimage = img.imread(myfile)
plot.imshow(myimage)
plot.show()

真酷!

那怎么使用 TensorFlow 处理图片呢?超级容易。

使用 TensorFlow 生成或裁剪图片

首先,向一个占位符赋值:

myimage = tf.placeholder("int32",[None,None,3])

使用裁剪操作来裁剪图像:

cropped = tf.slice(myimage,[10,0,0],[16,-1,-1])

最后,运行这个会话:

result = sess.run(cropped, feed\_dict={slice: myimage})

然后,你就能看到使用 matplotlib 处理过的图像了。

这是整段代码:

import tensorflow as tf
import matplotlib.image as img
import matplotlib.pyplot as plot
myfile = "likegeeks.png"
myimage = img.imread(myfile)
slice = tf.placeholder("int32",[None,None,3])
cropped = tf.slice(myimage,[10,0,0],[16,-1,-1])
sess = tf.Session()
result = sess.run(cropped, feed_dict={slice: myimage})
plot.imshow(result)
plot.show()

是不是很神奇?

使用 TensorFlow 改变图像

在本例中,我们会使用 TensorFlow 做一下简单的转换。

首先,指定待处理的图像,并初始化 TensorFlow 变量值:

myfile = "likegeeks.png"
myimage = img.imread(myfile)
image = tf.Variable(myimage,name='image')
vars = tf.global_variables_initializer()

然后调用 transpose 函数转换,这个函数用来翻转输入网格的 0 轴和 1 轴。

sess = tf.Session()
flipped = tf.transpose(image, perm=[1,0,2])
sess.run(vars)
result=sess.run(flipped)

接着你就能看到使用 matplotlib 处理过的图像了。

import tensorflow as tf
import matplotlib.image as img
import matplotlib.pyplot as plot
myfile = "likegeeks.png"
myimage = img.imread(myfile)
image = tf.Variable(myimage,name='image')
vars = tf.global_variables_initializer()
sess = tf.Session()
flipped = tf.transpose(image, perm=[1,0,2])
sess.run(vars)
result=sess.run(flipped)
plot.imshow(result)
plot.show()

以上例子都向你表明了使用 TensorFlow 有多么容易。


via: https://www.codementor.io/likegeeks/define-and-use-tensors-using-simple-tensorflow-examples-ggdgwoy4u

作者:LikeGeeks 译者:ghsgz 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出